2013-10-17 31 views
0

我有2個關聯模型(項目和城市 - 城市已經由我填充)以及用戶可以輸入他們在城市注意到的事物的表單。他們現在可以輸入該事物的名稱和城市的ID。然而,顯然我想讓他們進入城市的名稱並獲得該名稱的ID,因爲他的城市存在於我的數據庫中。如何使用表單發送特定對象(關聯模型)的ID?

我該怎麼做才能獲得ID?

這裏是我的模式

class City < ActiveRecord::Base 
    has_many :items 
end 

class Item < ActiveRecord::Base 
    belongs_to :city 
end 

schema.rb參考

add_index "items", ["city_id"], name: "index_items_on_city_id", using: :btree 

表:

<%= form_for :item, url: items_path do |f| %> 
    <%= f.text_field :name %> 
    <%= f.text_field :city_id %> 
<% end %> 

項目控制器:

def create 
    @item = Item.new(params[:item].permit(:name, :city_id)) 
end 

非常感謝!

+1

爲什麼不給城市增加一個下拉菜單? –

+0

這實際上會很棒,但我怎麼做才能發送城市的ID? – watt

回答

0

您已正確設置關聯,但您需要創建與城市相關聯的新項目,所以我認爲如果您在表單中刪除城市的文本字段並且需要寫入City.items.create (params)在你的控制器中。這將照顧你的協會

+0

感謝您的回覆,但我不明白,對不起。所以我應該從視圖中刪除'<%= f.text_field:city_id%>'並在我的控制器中添加'City.items.create(params)'?這不起作用。 – watt

+0

是的,除非你想使用下拉列表或用戶可以選擇城市的東西..你可以粘貼你的控制器的代碼。我想查看你所做的更改 – Mandeep

+1

你需要首先通過@ city = City.find(id)找到城市,然後執行@ city.items.create(params)。如果你沒有任何條件可以找到城市,那麼你只需要使用一個下拉列表,沒有其他選擇 – Mandeep

0

修復這個使用@尼基塔辛格關於下拉的建議,現在它的工作。這是我的表單看起來如何:

<%= form_for :item, url: items_path do |f| %> 
    <%= f.text_field :name %> 
    <%= f.collection_select :city_id, City.order(:name),:id, :name, include_blank: true %> 
<% end %> 

感謝您花時間回覆!

相關問題