2010-01-26 96 views
1

我有一個users_controller:Ruby on Rails的:從其它控制器將參數傳遞到一個模型

@user = User.new(params[:user]) 

將參數傳遞給用戶模型,其工作正常。

我需要通過用戶控制器將一些標有「配置文件」的附加參數傳遞給用戶模型。

這不起作用:

@user = User.new(params[:user, :profile]) 

也不是這:

@user = User.new(params[:user], params[:profile]) 

我嘗試了各種其他類似的事情,才能從配置參數進入這個模型的視圖。

我使用fields_for得到這些領域進入用戶控制器的正常工作:

<% fields_for "profile" do |fa| %> 

我並不需要/想嵌套關係。我只需要將視圖中指定的其他參數傳遞給模型。

謝謝!

+0

澄清下面的評論。如果您沒有AR關係,則需要編寫處理向用戶分配配置文件信息的代碼。 – 2010-01-27 06:25:12

回答

1

fields_for通常用於向一個相關的模型分配PARAMS,所以它使有關的數據的結構中的一些特定的假設。

如果在模型中有配置文件屬性,則可以將配置文件參數設置爲params [:user]集合的一部分,這將正確地分配屬性。

您通過命名域做到這一點:

text_field_tag(user[profile], "val") 

text_field_tag(user[profile][name], "val") 
+0

我沒有配置文件參數作爲用戶模型的一部分。配置文件參數在用戶模型之外。我只需要將這個參數中的數據傳遞給用戶模型。 – djburdick 2010-01-27 05:56:41

+0

在這種情況下,只需使用某種顯式集(user.profile = params [:profile])將其傳遞給用戶,或覆蓋模型初始化方法並使用new。 – 2010-01-27 06:21:10

+0

無論哪種情況,fields_for都不起作用。 – 2010-01-27 06:22:45

-1

嘗試:

@user = User.new(params[:user]) 
@user.profile = Profile.new(params[:profile]) 

@user = User.new(params[:user]) 
@user.attributes = params[:profile] 
+0

如果我使用: @ user.attributes = params [:profile] 如何訪問用戶模型中的這些項目? user.profile_name attributes.profile_name etc不起作用。 謝謝! – djburdick 2010-01-27 00:14:00

+0

嘿,你有多少屬性你對配置文件(我有點不清楚你的對象模型是什麼)。如果不是那麼多,你可能應該直接在用戶對象上直接添加profile_name屬性,並使用form_for(而不是字段)。如果你給我們更多關於你的對象模型的細節,我們可以幫助你更好。 – Jonathan 2010-01-27 03:07:17

+0

嘿!配置文件是一個包含更大數據集的獨立模型。此外,用戶模型將與其他類型的登錄綁定,因此用戶模型需要保持清潔,除了登錄憑證之外沒有其他任何附加內容。 – djburdick 2010-01-27 05:53:25

0

感謝託比!

只是添加到他的答案。 我只好把

attr_accessor :profile 

在用戶模式來訪問該元素。

所以整個事情是這樣的:

查看:

<%= text_field_tag :profile, params[:profile] %></p> 

控制器:

@user.profile = params[:profile] 

型號:

attr_accessor :profile 

之後,我可以訪問配置元素一樣在用戶模型中的常規元素。

相關問題