2010-12-03 44 views
1

這應該是一個上籃......的Ruby/Rails:動態更改屬性共享部分的人

我試圖改變,這取決於控制器/模型調用包含窗體部分表單域的屬性字段...

問題(下)與parent_id ...它引用狗表中的兩列之一。它需要或者是kennel_idmaster_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' 

回答

1

剛大聲思考:

我不知道,如果parent -models有適當的名字,但你可以這樣做:

= 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 

只是一些想法。希望他們其中之一對你有意義...

+0

謝謝!所有好主意,非常有幫助!我曾考慮過讓多態關係成爲可能,但通常情況下,一條狗可能屬於一個狗窩和一個主人......我不確定這是否可能與多態性有關?!? – Meltemi 2010-12-03 20:59:27