Ruby on rails 为多个创建操作:通过
我有这样的模型:Ruby on rails 为多个创建操作:通过,ruby-on-rails,has-many-through,Ruby On Rails,Has Many Through,我有这样的模型: User Paper Subscription 正如您所看到的,有很多:通过关系,订阅存储:用户id和:纸张id 纸张有自己的控制器,其纸张控制器#索引操作列出所有可用纸张 现在才是真正的问题 我想在每篇论文旁边添加一个“订阅”链接,这意味着调用 SubscriptionsController#create 方法 在我的PapersController索引中 当我查看订阅表时:paper\u id为零,如何获取:paper\u id 我做错了什么?链接到“订阅”的等效路由,
User
Paper
Subscription
正如您所看到的,有很多:通过
关系,订阅
存储:用户id和:纸张id
纸张有自己的控制器,其纸张控制器#索引
操作列出所有可用纸张
现在才是真正的问题
我想在每篇论文旁边添加一个“订阅”链接,这意味着调用
SubscriptionsController#create
方法
在我的PapersController索引中
当我查看订阅表时:paper\u id为零,如何获取:paper\u id
我做错了什么?链接到“订阅”的等效路由,订阅路径:method=>:post是
POST /subscriptions(.:format) subscriptions#create
因此,您必须显式地传递纸张id
。看一看
更新链接至:post%>
而不是
@subscription = current_user.subscriptions.build(subscription_params)
它应该是(因为纸张id
不在订阅命名空间下,您可以直接访问它)
请尝试以下内容
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
从服务器控制台或通过调试重新检查参数值。我认为您可能会提供paper作为单独的参数,如params[:paper_id],但您只能通过不是paper_id值的subscription_参数来构建@subscription实例。为此,请修改您的创建操作,如下所示
@subscription = current_user.subscriptions.build(subscription_params.marge({:paper_id => params[:paper_id]})
link\u to
不需要帖子选项。谢谢,它成功了:)你能给我解释一下吗。我在这里感到困惑。如果参数[:paper_id]输入为null或空白,会发生什么。我认为您的代码应该以优雅的方式处理它。还有一个问题,现在我的订阅表中有用户id和纸张id,显示用户名和纸张名称的最佳方式是什么。@Raghu:是的,这不是一种干净的处理这种情况的方式,我刚刚在上面的代码中解决了这个问题。@user3404674:希望它现在有意义。
@subscription = current_user.subscriptions.build({paper_id: params[:paper_id]})
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
@subscription = current_user.subscriptions.build(subscription_params.marge({:paper_id => params[:paper_id]})