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%>
으로 변경하십시오! 고마워요 :) 제 튜토리얼을 따르고 이해할 수 없기 때문에 책 [author_ids] []의 유용성을 제게 설명해주십시오. – rota90
이것은 레일스에서 양식 필드를 정의하는 방법입니다. 나는'<% = f.text_field : title %>'가 필드 이름을'book [title]'으로 정의한다는 것을 의미한다. 제어기'params [: book] [: title] # =>의 해당 필드는'더 복잡한 경우'book [author_ids] []'형식으로 주어지는 책 제목을 반환합니다. 이는 여러분의 컨트롤러에'ids'배열을 보내고 싶다는 뜻입니다. 이는 다중 값 입력란을 정의 할 때 매우 유용합니다 (책에 저자가 많을 수 있음). 뷰 내의 이러한 정의는 단순히'params [: book] [: author_ids]'에 의해 컨트롤러 내에서 액세스되고 배열을 반환합니다. – blelump