2013-02-24 50 views
0

我對ruby和rails非常陌生,所以這可能是一個相當簡單的問題,但對我來說很混亂。如何爲用戶存儲首選項列表?

我有用戶(與模型,控制器,視圖和一切都已經設置)。現在我想介紹一些用戶可以指出他們的偏好是什麼的東西。例如,用戶可以指出他們最喜歡的5種食物,然後讓我能夠通過最喜歡的食物搜索用戶。

這是我的第一個鐵軌項目,我有點不確定如何解決這個問題。我的想法到目前爲止:

1)添加一個布爾數組到我的用戶模型,呈現數組作爲複選框,然後以某種方式存儲它。 (我只是不確定如何爲此生成遷移,或者如果通過食品項目進行搜索,那麼如何執行此遷移)。

2)創建一個食物模型,並在我的用戶模型中使用has_many關係將用戶鏈接到食物。我想我能夠根據食物搜索用戶?我覺得食品模型可能會過度殺傷,因爲它不是與它有關的任何信息。這只是附加到用戶的東西。

任何建議,代碼,提示或技巧將非常感激。

回答

1

首先,您應該使用http://railscasts.com/作爲資源。你在這裏描述的一切,這個網站上有教程。

因爲搜索和返回列表會很麻煩,所以您要謹慎地在用戶模型中添加多個字段(即fav_food_one,fav_food_two等)。

你更可能會想要的東西,你有一個has_many關聯

User: username, name, email, etc 

Food: name, category, fun_facts, etc 

UserFavoriteFoods: user_id:integer, food_id:integer 

在你的模型,你可以創建一個這樣的關聯。

User=> 
    has_many :user_favorite_foods, :dependent => :destroy 
    has_many :foods, :through => :user_favorite_foods 

Food=> 
    has_many :user_favorite_foods, :dependent => :destroy 
    has_many :users, :through => :user_favorite_foods 

UserFavoriteFoods => 
    belongs_to :user 
    belongs_to :food 

然後在你的(我假設用戶#查看)視圖,你可以做這樣的事情

<% @user.foods.each do |food| %> 
<li><%= food.name %></li> 
<% end %> 

編輯=>

您也可以使用寶石一樣simple_form和將其應用於您的用戶表單。

在這種列表中使用f.association :foods會自動彈出一個選擇框,並允許您的用戶輕鬆選擇不同的食物項目。

+0

非常感謝railscasts.com鏈接。這是超級有用的。我想要的是:http://railscasts.com/episodes/167-more-on-virtual-attributes?autoplay=true – 2013-02-25 09:25:52