Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为多个创建操作:通过_Ruby On Rails_Has Many Through - Fatal编程技术网

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]})