Ruby on rails 使用一个表单添加到rails中的多个表

Ruby on rails 使用一个表单添加到rails中的多个表,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,基本上,我是在向数据库中添加书籍,我想将作者存储在一个单独的表中。所以我有一个名为authors的表,它被表书引用 我想创建一个rails表单来添加一本书,我希望它只是作者、标题、出版商等的一个简单表单,如果它发现作者已经在authors表中,那么它应该只引用该记录,如果它不在authors表中,那么它应该添加一条新记录并引用它 它正在工作,但值未存储到表中? 在检查表中的作者姓名时,我得到了nil参数: {"utf8"=>"✓", "authenticity_token"=

基本上,我是在向数据库中添加书籍,我想将作者存储在一个单独的表中。所以我有一个名为authors的表,它被表书引用

我想创建一个rails表单来添加一本书,我希望它只是作者、标题、出版商等的一个简单表单,如果它发现作者已经在authors表中,那么它应该只引用该记录,如果它不在authors表中,那么它应该添加一条新记录并引用它

它正在工作,但值未存储到表中? 在检查表中的作者姓名时,我得到了nil参数:

 {"utf8"=>"✓",       "authenticity_token"=>"/Tk87vLoJx+/EgPGVEa7x59IeGMGLikknBMcMTw90oo=",   "book"=>{"book_name"=>"y", "price"=>"1", "authors"=>{"author_name"=>"b",  "title"=>"k", "publisher"=>"s"}}, "commit"=>"Submit"}
        Author Load (1.9ms)  SELECT  "authors".* FROM "authors"  WHERE   "authors"."author_name" IS NULL LIMIT 1
 Unpermitted parameters: authors

  params[:authors_name] in method Author.find_or_create_by() value is nil
 but book column values are added to books table and author table id is only apears in author table 
使用引用创建模型

    rails generate model Author author_name:string{15} title:string{15} publisher:string{15}
    rails generate model Book book_name:string{15} price:integer Author:references
图书管理员

        class BooksController < ApplicationController
          def new

          end
         def create 
          # Client.find_or_create_by(first_name: 'Andy')
           @author = Author.find_or_create_by(:author_name =>     params[:author_name]) 
           @book = Book.new(books_params)
           @book.Author = @author
           @book.save
          redirect_to root_url

         end
        private

          def books_params
             params.require(:book).permit(:book_name, :price,:address => [:author_name, :title, :publisher])
        end
        end
class BooksControllerparams[:author_name])
@book=book.new(books\u参数)
@book.Author=@Author
@保存
将\u重定向到根\u url
结束
私有的
def books_params
参数require(:book).permit(:book_name,:price,:address=>[:author_name,:title,:publisher])
结束
结束
模型代码

        class Book < ActiveRecord::Base
          belongs_to :Author
          accepts_nested_attributes_for :Author
        end

      class Author < ActiveRecord::Base
      end
classbook
book.html

<%= form_for Book.new  do |f| %>

  <p>
    <%= f.label :book_name %><br />
    <%= f.text_field :book_name %>
  </p>
  <p>
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </p>

  <%= f.fields_for :authors do |b| %>
     <p>
    <%= b.label :author_name%><br />
    <%= b.text_field :author_name %>
  </p>
<p>
    <%= b.label :title%><br />
    <%= b.text_field :title %>
  </p>
<p>
    <%= b.label :publisher%><br />
    <%= b.text_field :publisher%>
  </p>

  <% end %>
  <p><%= f.submit "Submit" %></p>
<% end %>
~             







~
我的问题是

  • 当在testbox中输入author_name,而在find_或create By方法中使用parama[:authors_name]访问此author name时,它在查询中给出nil

  • 2如何在authors表中保存authors列值?

    您的代码有很多错误。先生,由于我是rails新手,您能告诉我错误吗