每个循环的Ruby Rails form_for

时间:2014-01-14 00:16:00

标签: ruby-on-rails

知道为什么这个循环不起作用?

<% @books.each do |book| %>
    <%= form_for(@bookedit) do |f| %>
      <div class="field">
        <%= f.label :count, 'how many?' %><br />
        <%= f.number_field :count %>
      </div>
    <% end %>
<% end %>
用户控制器上的

@books = Book.where(user_id: current_user.id)
@book = Book.where(user_id: current_user.id)
@bookedit = Book.find(:all, :conditions => {:id => @book})

@user = User.find(params[:id])

但是当我使用find(:firstfind(:last时,它会显示(但重复该值):它会抛出此错误:

NoMethodError in Users#account 
undefined method `book_book_path' for #<#<Class:0x6ec5650>:0x6ec3448>

谢谢!我对红宝石的新闻:D

1 个答案:

答案 0 :(得分:3)

您的用户应如下所示 - &gt;

@user = User.find(params[:id])
#or @user = current_user
@books = @user.books

您的观点应如下所示 - &gt;

<% @books.each do |book| %>
    <%= form_for(book) do |f| %>
      <div class="field">
        <%= f.label :count, 'how many?' %><br />
        <%= f.number_field :count %>
      </div>
    <% end %>
<% end %>

嗨约翰尼,问题在于我们在控制器中的实例变量 - &gt;

@books = Book.where(user_id: current_user.id)
@book = Book.where(user_id: current_user.id)
@bookedit = Book.find(:all, :conditions => {:id => @book})

根据我的理解,用户有很多书。

在这种情况下,@book实际上并不是一本书的一个实例,但它与@books相同。同样地,@bookedit正在获取具有Id的所有Books,但它没有传递用户的id。

由于用户和书籍之间的关联,您可以通过

获取我用户拥有的所有书籍
@books = @user.books

在您看来,如果我们这样做

<% @books.each do |book| %>
    <%= form_for(book) do |f| %>

我们遍历所有书籍,然后为那本书运行一个form_