- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 simple_form的 fields_for 并使用 Ryan Bates ( Railscast ) 提出的 link_to_add_fields
方法动态添加字段。
我的问题是
f.object.class.reflect_on_association(association).klass.new
用于为附加字段实例化模型,它创建了一个完全空的记录(未设置 order_id),因此我的委托(delegate)方法导致错误。
如果你改为使用
发送(:line_items).build
要实例化新记录,它已经设置了父级的id
:
# order.rb
class Order < ActiveRecord::Base
has_many :line_items
def price_currency
"USD"
end
end
# line_item.rb
class LineItem < ActiveRecord::Base
belongs_to :order
delegate :price_currency, :to => :order
end
# rails console
> order = Order.last # must be persisted
> line_item1 = order.class.reflect_on_association(:line_items).klass.new #=> #<LineItem id: nil, order_id: nil, created_at: nil, updated_at: nil>
> line_item2 = order.send(:line_items).build #=> #<LineItem id: nil, order_id: 1, created_at: nil, updated_at: nil>
> line_item1.price_currency #=> RuntimeError: LineItem#price_currency delegated to order.price_currency, but order is nil
> line_item2.price_currency #=> "USD"
我的问题:为什么 Ryan Bates 使用
f.object.class.reflect_on_association(association).klass.new
实例化模型?使用 #send
是一件坏事,还是我错过了有关 send(association)
方式的其他内容?
长话短说:
我可以安全地更换吗
f.object.class.reflect_on_association(association).klass.new
与
f.object.send(association).build
没有问题?
最佳答案
Why does Ryan Bates use
f.object.class.reflect_on_association(association).klass.new
to instantiate the model?
因为在构建表单时,.accepts_nested_attributes
对象不需要将集合元素链接到它。这将在稍后自动发生(如果您使用 fields_for
)。如果您需要链接,我认为使用 order.line_items.build
或 order.send(:line_items).build
没有任何问题。
所以
Can I safely replace
f.object.class.reflect_on_association(association).klass.new
with
f.object.send(association).build
without problems?
是的,你可以。
关于ruby-on-rails - 使用 parent.send(association).build 而不是 reflect_on_association(association).klass.new 动态添加嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18980282/
更新 通过使用has_and_belongs_to_many使它起作用 有人知道为什么这样吗? 你好, 使用事件记录保存时出现以下错误 undefined method `reflect_on_ass
我正在尝试在我的 rails 4 应用程序中构建一个包含嵌套资源的表单。我正在使用茧 gem 。每个步骤都有子步骤,我希望允许用户向表单添加任意数量的子步骤,并且他/她愿意。 步骤.rb class
我正在使用 simple_form的 fields_for 并使用 Ryan Bates ( Railscast ) 提出的 link_to_add_fields 方法动态添加字段。 我的问题是 f.
在我的 Rails 应用程序中,我有我的模型 Request、Service 和 ServiceRequest 在我的 models.rb 文件中我有: 请求.rb: class Request :
我是一名优秀的程序员,十分优秀!