2010-10-21 72 views
2


我想知道哪條路是最好的解決我的問題:
我有一個表格,以便通過選擇字段來選擇的人。如果在選擇字段中缺少名稱,則可以使用文本字段直接添加該人員的姓名。
- new.html.erb中的表格是Team控制器的new操作的格式。
- 人員列表摘自People模型。選擇字段,文本字段和外鍵

def new
@team = Team.new
@people = People.all
end

我在Team模型創建一個屬性來存儲new_person文本字段:

class Team < ActiveRecord::Base
attr_accessor :new_person
...
end

最後,這是我的觀點的摘錄:

<%= f.select :person_id, @people.map { |p| [p.name, p.id] } %>
<%= f.text_field :new_person %>

顯然,我wo我希望在保存表格中的數據之前將新人保存在表Person中。像往常一樣,該ID將被保存,而不是名字

在這一點上,我有兩個問題:
1 /參數數組有鑰匙new_person什麼沒有表。所以不可能使用Team.new(params[:team])方法。有沒有簡單的解決方案來避免這個問題? 2 /因爲我需要person_id,當名字來自new_person字段時,我怎麼能得到它?在使用before_filter方法?

非常感謝,
卡米耶。

回答

0

1)您應該考慮在您的form_for塊內的視圖中使用fields_for。這將允許您指定fields_for塊內的字段是不同模型的屬性,將生成適當命名的輸入字段,並允許您在控制器中使用params [:team]。有關詳細信息,請參閱FormHelper documentation

2)儘管您可以在控制器中執行一些操作,首先檢查new_person字段中的值,創建記錄,使用新創建的人員的值更新params [:team]的內容並創建團隊,這對我來說有點像黑客。另一個可能不那麼脆弱的解決方案是在頁面上使用一些JavaScript,爲用戶創建某種模式對話框來創建新人員,將新人員提交給人員#create controller method,然後刷新drop下。使用Rails遠程表單和不顯眼的JavaScript,使用jQuery UI modal form(該鏈接的很好例子來做你需要的)來完成此操作可能不會非常困難。

這對您的第二個問題來說可能是比您希望的更困難的解決方案,但從長遠來看可能更有用。