Ruby on rails 您能否在创建时传递关联模型的参数

Ruby on rails 您能否在创建时传递关联模型的参数,ruby-on-rails,activerecord,ruby-on-rails-4,associations,Ruby On Rails,Activerecord,Ruby On Rails 4,Associations,我想做的是- 我有两个型号Record和Author。调用Record.create paramsi传递关联作者模型的参数时。 记录有一列正文和作者有一列姓名 当我试图通过以下考试时 Record.create{body:“some text”,作者:{name:'some name'} 我得到错误ActiveRecord::UnknownAttributeError:unknown属性:author 我怎样才能做我需要的 更新1 关联-记录有作者尝试此方法,希望能解决您的问题: class R

我想做的是- 我有两个型号
Record
Author
。调用
Record.create params
i传递关联作者模型的参数时。
记录
有一列
正文
作者
有一列
姓名
当我试图通过以下考试时
Record.create{body:“some text”,作者:{name:'some name'}

我得到错误
ActiveRecord::UnknownAttributeError:unknown属性:author

我怎样才能做我需要的

更新1

关联-记录有作者

尝试此方法,希望能解决您的问题:

class Record < ActiveRecord::Base
    has_one :author
    accepts_nested_attributes_for :author, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true
end
class记录lambda{a | a[:name].blank?},:allow_destroy=>true的_嵌套_属性
结束

有关更多详细信息,请参见嵌套属性

您可能正在寻找,或者-两者都依赖于您的两个模型之间的关联:

#app/models/record.rb
Class Record < ActiveRecord::Base
    has_one :author
    accepts_nested_attributes_for :author
end

#app/models/author.rb
Class Author < ActiveRecord::Base
   belongs_to :record
end
这意味着您应该能够访问另一个模型中的嵌套属性数据(我不确定您是否必须使用
接受
的嵌套属性)


ActiveRecord对象

最后,您需要考虑这个代码< < /P>中的<代码> ActVIECORD对象< /代码>的作用 请记住,这里传递的不仅仅是单个数据项,而是构建和传递对象。这意味着你必须考虑它们是如何工作的以及它们的意思。我会给你一个简单的解释:

Rails是一个框架,因为它是基于Ruby构建的。这意味着您在其中创建/使用的每一条数据都是一个对象。对象与变量大不相同-它们更深入,包含更多数据,允许以各种不同的方式使用它们:

Rails以多种不同的方式使用对象;主要的一点是,许多助手和其他方法围绕对象构建自己。这就是为什么您在路由中获得
资源
指令,并且可以执行以下操作:

许多人的问题是,他们不理解Rails应用程序中面向对象的价值,因此试图从一个脱节的系统的角度来思考他们的逻辑。相反,这将极大地帮助你,你需要考虑每次创建一个记录时,你正在构建一个对象,因此,你需要确保你在周围构建你的应用程序。
如上所述,必须确保要创建的对象之间存在关联。如果这样做,您将能够同时构建这两个模型

这两个模型是否关联?感谢您指出这一点。忘了提这个!没问题,我现在就给你写答案!
#app/controllers/records_controller.rb
Class RecordsController < ApplicationController
   def new
      @record = Record.new
      @record.author.build
   end

   def create
      @record = Record.new record_params
      @record.save
   end

   private

   def record_params
      params.require(:record).permit(:record, :attributes, author_attributes: [:name])
   end
end

#app/views/records/new.html.erb
<%= form_for @record do |f| %>
   <%= f.text_field :record %>
   <%= f.fields_for :author do |a| %>
      <%= a.text_field :name %>
   <% end %>
   <%= f.submit %>
<% end %>
#app/models/record.rb
Class Record < ActiveRecord::Base
   has_one :author, inverse_of: :author
   before_create :build_record
end

#app/models/author.rb
Class Author < ActiveRecord::Base
   belongs_to :record, inverse_of: :record
   before_create :set_options

   private

   def set_options
      self.draft = true unless self.record.draft.present?
   end
end