我的应用程序有一个用户模型和一个帖子模型,其中用户有_许多帖子和帖子属于_用户。帖子显示在用户的个人资料页面上。我希望任何用户都能够在他自己或任何其他用户的个人资料页面上发布。但是,我遇到的问题是,虽然我知道谁在发帖 (current_user),但我不知道 current_user 在谁的个人资料上。我需要知道这一点才能将新帖子分配给该用户的帖子。如何从当前正在查看的个人资料中提取用户 ID 信息,以便我知道在哪里分配新帖子?
我的微柱控制器看起来像:
class MicropostsController < ApplicationController
before_filter :authenticate_user!
def create
@user_of_page = User.find_by_name(params[:id])
@micropost = @user_of_page.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to :back
else
redirect_to about_path
end
end
def destroy
end
end
但是我得到了一个 NoMethodError: undefined method `microposts' for nil:NilClass。我认为这是因为我在创建 user_of_page 变量时犯了一些错误,但我不知道那是什么!
解决方案
谢谢山姆。我接受了你的建议,最终这样做了:
我在我的 Micropost 表中添加了一个名为 belongs_to_id 的列。
然后,我使用 micropost 表单中的隐藏字段将其个人资料从用户显示视图中显示的用户的 id 传递给 micropost 控制器,如下所示:
<%= form_for @micropost do |f| %> <%= render 'shared/error_messages', :object => f.object %> <div class="field"> <%= f.label :content, "Why that mood?" %> <%= f.text_area :content %> </div> <div class="field"> <%= f.hidden_field :author, :value => current_user.name %> <%= f.hidden_field :belongs_to_id, :value => @user.id %> <%= f.hidden_field :agree, :value => "0" %> <%= f.hidden_field :disagree, :value => "0" %> <%= f.hidden_field :amused, :value => "0" %> </div> <div class="actions"> <%= f.submit "Submit" %> </div> <% end %>
然后,我使用这个 id 值在 micropost 控制器中搜索要分配帖子的用户,如下所示:
class MicropostsController < ApplicationController before_filter :authenticate_user! def create @user_of_page = User.find(params[:micropost][:belongs_to_id]) @micropost = @user_of_page.microposts.build(params[:micropost]) if @micropost.save flash[:success] = "Micropost created!" redirect_to :back else redirect_to about_path end end def destroy end end
魔法!再次感谢,您帮助我以正确的方式看待它。