1

私はRailsが初めてです。質問のタイトルは自由に編集してください。これのいくつかはあなたにとって明らかかもしれません。(私は願います!)

多くのロット(販売アイテム)を持つオークションがあります。 オークションを設定しました。追加/編集/削除できます。

/auctions/1/lots/ のような URL から 1 つのページからロットを表示/追加/削除できるようにしたいので、ルートを次のように設定します。

resources :auctions, :except => :edit do
  resources :lots
end

私のモデルは次のようになります。

class Auction < ActiveRecord::Base
  ...
  has_many :lots
end

class Lot < ActiveRecord::Base
  belongs_to :auction
  ...
end

私のlots_controller.rbは次のようになります:

def index
  @auction = Auction.find(params[:auction_id])
  @lots = @auction.lots
end

私のlots/index.html.erbファイル:

<ul>
<% @lots.each do |lot| %>
  <li><%= lot.description %></li>
<% end %>
</ul>

これにより、ロットがうまく表示されます。
問題は、新しいロットを作成するためのフォームを配置しようとしたときです。何をどこに置く必要があるのか​​ わかりません。

<%= form_for(@auction.lots.build) do |f| %>
  <%= f.input :description %>
<% end %>

これを追加すると、ページを表示すると次のエラーが表示されます。
undefined method `lots_path' for #<#<Class:0x007fb77ea26308>:0x007fb77d43fd00>

@auction.lots.build私はそこに置くのが正しい議論であるという印象を受けました.

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

form_for新しい Lot エンティティからアクション パスを推測しようとしています (そして失敗しています)。直接指定することができます:url

<%= form_for(@auction.lots.build, url: auction_lots_path(@auction)) do |f| %>

または、配列を渡して、このリソースがネストされていることを form_for に示します。

<%= form_for([@auction, @auction.lots.build]) do |f| %>
于 2013-02-13T16:00:37.023 に答える