0

我有一个名为 Listings 的资源和一个名为 email 的资源

列表 has_many :emails email belongs_to :listing

我正在尝试将列表 ID 传递给 email.listing_id 但我不断收到此错误:

Couldn't find Listing without an ID ActiveRecord::RecordNotFound in EmailsController#create

这是我的代码:

class EmailsController < InheritedResources::Base
    def new
        @listing = Listing.find(params[:listing_id])
        @email = Email.new

    end

    def create
        @listing = Listing.find(params[:listing_id])
        @email = Email.new(params[:email])
        @email.user_id = current_user.id


    end

从我的列表显示页面我传递了listing.id

<%=link_to "Email Listing", new_email_path(:listing_id => @listing.id)

电子邮件_form

  <%= f.input :email %>
  <%= f.input :message %>
  <%= f.hidden_field :listing_id, :value => @listing.id %>
  %= f.button :submit, :value=> "Send Email" %>

参数:

"email"=>{"email"=>"xyz@z.com",
 "message"=>"hello",
 "listing_id"=>"3"},
 "commit"=>"Send Email"}
4

1 回答 1

3

其实很简单..你的参数是

params[:email][:listing_id]不是params[:listing_id]

啊,答案被删除了,您在其中复制粘贴了您要发送的参数,所以我不再证明是这种情况,但是从您粘贴在那里的内容来看,参数似乎是形式

只是改变

@listing = Listing.find(params[:listing_id])

@listing = Listing.find(params[:email][:listing_id])

顺便说一句,还有很多需要改进的地方......

第一个。您可以使用嵌套资源,因此您不必关心放置 hidden_​​input。其次,您可以创建一个 before_filter 方法来获取正确的 @listing 并使用 @listing.emails.build 正确设置关系。

于 2013-04-17T19:51:59.640 回答