这应该是某人的上篮......
我正在尝试更改表单字段的属性,具体取决于哪个控制器/模型调用包含表单字段的部分...
问题(如下)是parent_id
...引用了dog表中的两列中的一列。它需要为kennel_id
或master_id
,具体取决于呈现此部分的视图。
还不够舒服,使用Ruby / Rails语言/语法/工具动态更改它,而不会陷入if/else
语句中。
我正在调用一个共享部分并传入一个局部变量:
= render "dogs/form", :parent => @kennel
或
= render "dogs/form", :parent => @master
在部分我想:
= form_for ([parent, target.dogs.build]) do |f|
= render "shared/error_messages", :target => parent
.field
= f.label :name
= f.text_field :name
.field
= f.hidden_field :parent_id ### <= PROBLEM
.actions
= f.submit 'Save'
答案 0 :(得分:1)
大声思考:
我不知道parent
- 模型是否具有适当的名称,但您可以执行以下操作:
= f.hidden_field "#{parent.class.name.underscore}_id"
但这看起来不对。那么,为什么不将它作为一个参数传递呢?
= render "dogs/form", :parent => @master, :foreign_key => :master_id
或者,在狗模型上创建别名以处理某种动态委派:
class Dog
def parent_id=(parent_id)
case parent.class
when Master then self.master_id = parent_id
when Kennel then self.kennel_id = parent_id
end
end
def parent_id
case parent.class
when Master then self.master_id
when Kennel then self.kennel_id
end
end
end
但那也很糟糕。这种关系可以是多态的吗?然后你可以省去转换。
class Dog
belongs_to :owner, :polymorphic => true
end
= f.hidden_field :owner_id
只是一些想法。希望其中一个对你有意义......
答案 1 :(得分:0)