2012-10-22 25 views
1

我有一個用戶模型,其中包含屬性(不是全部必需)first_name,last_name,birthday,profession,pet_name。在Rails中創建通用表格

用於註冊用戶需要輸入first_name和生日。

我想以某種方式得到它是無屬性(在這種情況下 - 姓氏和職業),並隨機選擇其中之一,並作出表格要求用戶填寫了

如果我這樣做@user.attributes.map{|k,v| v==nil ? k : nil}.compact我可以得到無的屬性。

如何製作足夠通用的表單以便可以在任何屬性上使用此方法?

回答

3

您可以在控制器動作填寫@field爲附加字段顯示形式,然後顯示該字段的形式:「request.post」

# controller action 
def additional_form 
    @field = @user.attributes.select{|k,v| v.nil?}.keys.sample 

    if request.post? 
    @user.update_attributes(params[:user]) and redirect_to root_path 
    end 
end 

# view for this action (additional_form.html.erb) 
<%= form_for @user do |f| %> 
    <%= f.text_field @field %> 
    <%= f.submit %> 
<% end %> 
+0

什麼部分? –

+0

您可以在控制器的操作中執行任何要保存新屬性的操作。我只是以此爲例。行爲是當表單發佈後@user記錄將被填充屬性更新,然後用戶將被重定向到根路徑。 – Hck

+1

是的,@Hck釘了它。你也可以這樣做:'@ user.attributes.reject {| k,v | v} .keys.sample' - 這將過濾掉錯誤的鍵而不是'nil',但這對你的情況應該不重要。 –