如何为用户存储首选项列表?

时间:2013-02-24 14:14:09

标签: ruby-on-rails-3.2

我对ruby和rails很新,所以这可能是一个非常简单的问题,但对我来说很困惑。

我有用户(模型,控制器,视图和所有设置都已建立)。现在我想介绍一些用户可以指出他们的偏好是什么的东西。一个例子是用户可以指出他们最喜欢的5种食物是什么,然后让我能够通过喜欢的食物搜索用户。

这是我的第一个铁轨项目,我有点不确定如何处理这个问题。到目前为止我的想法:

1)在我的User模型中添加一个布尔数组,将数组渲染为复选框,然后以某种方式存储它。 (我只是不确定如何为此生成迁移,或者如果按照这样实现如何按食品搜索)。

2)创建一个Food模型并使用我的User模型中的has_many关系将用户链接到食物。我想我能够根据食物搜索用户?我觉得食物模型可能有点矫枉过正,因为它不具备与之相关的任何信息。它只是附加到用户的东西。

任何建议,代码,提示或提示都将非常受欢迎。

1 个答案:

答案 0 :(得分: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#Show)视图中,你可以做这样的事情

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

编辑=&GT;

您还可以使用simple_form之类的gem,并将其应用于您的用户表单。

在此类列表中使用f.association :foods会自动显示一个选择框,让您的用户可以轻松选择不同的食物。