我有这样的模特:
User
Paper
Subscription
如您所见,has_many :through
商店与Subscription
商店有:user_id and :paper_id
Paper有自己的控制器,其PapersController#index
操作列出了所有可用的文件。
现在真正的问题
我想添加"订阅"链接到每篇论文旁边,这意味着要调用
SubscriptionsController#create
方法
在我的PapersController#index
中<td><%= link_to "Subscribe", subscriptions_path(paper),:method => :post %></td>
在我的SubscriptionsController #create中我有
def create
@subscription = current_user.subscriptions.build(subscription_params)
if @subscription.save
flash[:success] = "Paper Added to Profile"
redirect_to root_url
else
render 'static_pages/home'
end
end
当我查看订阅表时:paper_id是nil,我怎么能得到:paper_id 我做错了什么?
答案 0 :(得分:1)
link_to "Subscribe", subscriptions_path,:method => :post
的等效路线是
POST /subscriptions(.:format) subscriptions#create
因此,您必须明确传递paper_id
。看看link_to。
更新您的<td><%= link_to "Subscribe", subscriptions_path(paper_id: paper.id),:method => :post %></td>
而不是
@subscription = current_user.subscriptions.build(subscription_params)
它应该是(因为paper_id
不在订阅命名空间之下,你可以直接访问它)
@subscription = current_user.subscriptions.build({paper_id: params[:paper_id]})
答案 1 :(得分:0)
请试试以下内容。
def create
paper = Paper.where(id: params[:id]).first
@subscription = current_user.subscriptions.push(paper)
flash[:success] = "Paper Added to Profile"
redirect_to root_url
end
答案 2 :(得分:0)
从服务器控制台或调试中重新检查params值。我认为您可能将纸张作为单独的参数提供,例如params [:paper_id],但您只能通过subscription_params构建@subscription实例,而不是paper_id的值。为此,请修改您的创建操作,如此
@subscription = current_user.subscriptions.build(subscription_params.marge({:paper_id => params[:paper_id]})