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