2012-04-06 52 views
0

這是我的看法:Rails - 如何通過form_for中的關聯顯示值?

= form_for(@user) do |f| 
    = f.autocomplete_field @user.city.name, autocomplete_city_name_users_path 

在第二行我想顯示的關聯,但我正在逐漸

undefined method `London' for #<User:0x00000129bb3030> 

的關聯:

用戶belongs_to :city

城市has_one :user

錯誤信息(倫敦)顯示的結果是正確的,但爲什麼我gettng該錯誤信息?

回答

2

f.autocomplete_field的參數應該是方法的名稱。表單構建器會將此方法發送到@user以獲取正確的值。既然你感興趣的值不在用戶,但在用戶所擁有的對象,你有幾種選擇:

  1. 添加city_namecity_name=方法,您的用戶等級:

    # app/models/user.rb 
    
    def city_name 
        city && city.name 
    end 
    
    def city_name=(name) 
        city.name = name # You'll want to make sure the user has a city first 
    end 
    

    如果你不知道如何確保你有一個城市,你可以通過改變你的city_name=方法這個懶洋洋地創建一個:

    def city_name=(name) 
        build_city unless city 
        city.name = name 
    end 
    

    那麼你的表格看起來李柯本:

    = form_for(@user) do |f| 
        = f.autocomplete_field :city_name, autocomplete_city_name_users_path 
    
  2. 或者你也可以把它當作一個nested object。此添加到用戶:

    accepts_nested_attributes_for :city 
    

    而在你的表單中使用fields_for

    = form_for(@user) do |f| 
        = f.fields_for :city do |city_f| 
        = city_f.autocomplete_field :name, autocomplete_city_name_users_path 
    
+0

我有一個問題,我使用的第一個變種,但增加了輸入'country'。控制器,模型,一切都與** City **完全相同,但是當我嘗試將一些信息保存到'User'模型中時,我得到錯誤:**未定義方法'name ='爲零: NilClass **。怎麼可能解決這個問題?我嘗試搜索谷歌,但不幸沒有找到任何解決方案... – user984621 2012-04-06 22:28:34

+0

看看我上面添加的'build_city'示例有幫助。你需要確保你的用戶有一個城市對象,如果你要去那條路線。 – 2012-04-07 00:48:13