2014-10-26 2 views
0

Я новичок в рубинах на рельсах espacially вложенных форм. Я пытаюсь создать автора и книгу в одной и той же форме, зная, что между ними существует много разных отношений, и мой код представлен ниже. book.rbВложенные атрибуты и params.require error

class Book < ActiveRecord::Base 
has_many :exemplaires 
has_many :talks, inverse_of: :book 
has_many :subjects, through: :writings 
has_many :writings 
has_many :authors, through: :talks 
accepts_nested_attributes_for :authors 
validates :title, presence: true 

end 

author.rb:

class Author < ActiveRecord::Base 
has_many :talks 
has_many :books, through: :talks 
end 

talk.rb

class Talk < ActiveRecord::Base 
belongs_to :book 
belongs_to :author 
end 

book_controller.rb

class BooksController < ApplicationController 

    def index 

end 
def list 
    @books= Book.all 
end 
def new 
    @book = Book.new 
    @[email protected] 
end 
def create 
    @book= Book.new(book_params) 
    if @book.save 
    flash[:notice]='goood' 
    redirect_to admin_manage_path 
    else 
    flash[:alert]='ouups' 
    redirect_to root_url 
    end 
    end 



    private 

    def book_params 
    params.require(:book).permit(:title, :pages, :resume, :authors_attributes) 
    end 
    end 

книги \ new.html.erb

<h1>Add new book</h1> 
    <%= form_for(@book) do |form| %> 
    <%= form.label :title %> 
    <%= form.text_field :title %> 
    <%= form.fields_for :authors do |tag_form| %> 

     <%= tag_form.label :f_name %> 
     <%= tag_form.text_field :f_name %> 
    <% end %> 

    <%= form.submit "Submit" %> 
<% end %> 

, что я получил в качестве ошибки

Обработка BooksController # создать в HTML Параметры: { "utf8" => "✓", "authenticity_token" => "qpGng8tOiC/B5VX2tphuhAe + Wq1vx7it1vEO6XmwZmI =" , "book" => {"title" => "booooooooooooook", "authors_attributes" => {"0" => {"f_name" => "auuuuuuuuuuuuuuuutut"}}}, "commit" => "Отправить"} Неперечисленные параметры: authors_attributes

ответ

1

Вам также необходимо добавить в белый список поля authors_attributes:

def book_params 
    params.require(:book).permit(:title, :pages, :resume, authors_attributes: [:f_name]) 
    end 
+0

спасибо за реагирование, но я уже пробовал, и это дает мне эту ошибку «нет неявного преобразование символа в Integer» – rota90

+0

Эта проблема может быть связана с чем-то еще, но вы один шагом впереди сейчас, потому что вы определенно нужно указать белые поля автора, как я указал. Можете ли вы опубликовать полную ошибку, которую вы получаете? – Alireza

+0

это то, что визуализирует сервер « Обработка книгамиController # create as HTML Параметры: {" utf8 "=>" ✓ "," authenticity_token "=>" qpGng8tOiC/B5VX2tphuhAe + Wq1vx7it1vEO6XmwZmI = "," book "=> {" title "=>" kjqfghkjdgf "," authors_attributes "=> {" 0 "=> {" f_name "=>" fdqkhvfjkvkjv "}}}," commit "=>" Отправить "} Завершено 500 Внутренняя ошибка сервера в 2 мс TypeError (неявное преобразование символа в целое число): app/контроллеры/books_controller.rb: 29: in '[] ' app/контроллеры/books_controller.rb: 29: в' book_params' приложение/контроллеры/books_controller. rb: 14: в 'create '' – rota90