0

Listings というリソースと email というリソースがあります

リスト has_many :emails 電子メール 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)

メールフォーム

  <%= 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])

ところで、改善すべき点がたくさんあります...

1位。ネストされたリソースを使用できるため、hidden_​​input の配置を気にする必要はありません。次に、適切な @listing を取得する before_filter メソッドを作成し、@listing.emails.build を使用して関係を正しく設定できます。

于 2013-04-17T19:51:59.640 に答える