无法找到具有' id' = - Rails Association的订阅者

时间:2016-06-19 16:21:45

标签: ruby-on-rails ruby rails-activerecord

目前,我有一个属于Subscriber的{​​{1}}模型和Comments模型。现在我需要将两个模型链接在一起,以便我的Subscriber上有许多Subscriber。我想要的是如果我在控制台中写这个,我会得到我的答案 - > comments现在返回nil,因为它不知道如何找到离开评论的订阅者的ID。如何为应用程序提供正确的代码,以便我可以将这两者联系起来?为了清楚起见,我会发布代码。

控制器:

Subscriber.find(1).comments.first

正如您所看到的,我在创建评论时试图找到:subscriber_id。这就是我的问题所在。我该如何连接

错误:

enter image description here

模特:

class CommentsController < ApplicationController
  def new
    @comment = Comment.new
  end

  def create
    @subscriber = Subscriber.find(params[:subscriber_id])
    @comment = @subscriber.comments.build(comments_params)
    if @comment.save
      flash[:notice] = "Thank you!"
      redirect_to subscribers_search_path(:comments)
    else
      render "new"
    end
   end

  private

  def comments_params
    params.require(:comment).permit(:fav_drink, :subscriber_id)
  end
end

我应该清楚的另一个方面是我没有当前的订阅者,因为这个应用程序用于检查客户,因此应用程序不会记录用户只是用他们的电话号码检查它们。如果您需要更多信息,请告诉我。

视图:

class Comment < ActiveRecord::Base
  belongs_to :subscriber 
end


class Subscriber < ActiveRecord::Base
  has_many :comments
end

1 个答案:

答案 0 :(得分:1)

方法1

您的订阅者ID位于参数中的comment哈希值内。所以你需要找到像这样的订户

@subscriber = Subscriber.find(params[:comment][:subscriber_id])
#If you're taking this approach, you need to remove :subscriber id from your comment_params

Lik this

def comment_params
  params.require(:comment).permit(:fav_drink)
end
#@subscriber.comments.build will take care of the subscriber_id field for you, so its pointless rewriting it

方法2

或者您直接创建评论。

@comment = Comments.new(comments_params)
#notice this already has, the subscriber_id, so we don't need to find
#subscriber and then do build on it

如果有帮助,请告诉我