2014-10-29 100 views
0

我還是新的紅寶石在軌道上,我真的被阻止。 我想添加鏈接的書籍和作者到數據庫,它添加在兩個表中的記錄,但不是加入一個。這是我的代碼:使用HABTM協會添加記錄

books_controller.rb

class BooksController < ApplicationController 

    def index 
    @books= Book.all 
    end 

    def new 
    @book= Book.new 
    end 

    def create 
    @book= Book.new(book_params) 
    if @book.save 
    redirect_to books_path 
    else 
    redirect_to root_url 
    end 

    end 


    private 
    def book_params 
    params.require(:book).permit(:title, {:author_ids =>[]}) 
    end 
    end 

book.rb

class Book < ActiveRecord::Base 
    has_and_belongs_to_many :authors 
    before_destroy { authors.clear } 
end 

author.rb

class Author < ActiveRecord::Base 
    has_and_belongs_to_many :books 
end 

書籍/ new.html.erb

<h1>Add new book</h1> 
<%= form_for @book do |f| %> 
    <%= f.label :title %> 
    <%=f.text_field :title %> 
     <% for author in Author.all %> 
     <%= check_box_tag 'book(author_ids[])',author.id, @book.authors.include?(author) %> 
     <%= author.f_name %> 
     <% end%> 
    <%= f.submit %> 
    <%end%> 

回答

0

<%= check_box_tag 'book(author_ids[])',author.id, @book.authors.include?(author) %>分成<%= check_box_tag 'book[author_ids][]',author.id, @book.authors.include?(author) %>

+0

是的!非常感謝:)請問能向我解釋書[author_ids] []的用途是什麼,因爲我只是遵循tutorialand我無法理解 – rota90 2014-10-29 22:32:24

+0

這是您在Rails中定義表單字段的方式。我的意思是讓'<%= f.text_field:title%>'將您的字段名稱定義爲'book [title]'。對於控制器'params [:book] [:title]#=>中的該字段,返回形式給出的書名[現在,更復雜的情況,'book [author_ids] []'。這意味着你想發送一個'ids'到你的控制器。這在定義多值字段時非常有用(例如,書可能有許多作者)。這樣的定義在你的控制器中通過'params [:book] [:author_ids]'進行訪問並返回數組。 – blelump 2014-10-29 22:47:48