2014-10-29 2 views
0

나는 여전히 레일에 루비가있어 정말 차단되어 있습니다. 데이터베이스에 연결된 책과 작성자를 추가하려고하는데 두 테이블에 레코드가 추가되지만 tne에는 삽입되지 않습니다. 이건 내 코드입니다 :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] []의 유용성을 제게 설명해주십시오. – rota90

+0

이것은 레일스에서 ​​양식 필드를 정의하는 방법입니다. 나는'<% = f.text_field : title %>'가 필드 이름을'book [title]'으로 정의한다는 것을 의미한다. 제어기'params [: book] [: title] # =>의 해당 필드는'더 복잡한 경우'book [author_ids] []'형식으로 주어지는 책 제목을 반환합니다. 이는 여러분의 컨트롤러에'ids'배열을 보내고 싶다는 뜻입니다. 이는 다중 값 입력란을 정의 할 때 매우 유용합니다 (책에 저자가 많을 수 있음). 뷰 내의 이러한 정의는 단순히'params [: book] [: author_ids]'에 의해 컨트롤러 내에서 액세스되고 배열을 반환합니다. – blelump

관련 문제