我如何关联这些模型? Rails 3.2.13 Postgresql 9.1

时间:2013-06-24 23:41:11

标签: ruby ruby-on-rails-3.2 postgresql-9.1

我有一个基本的任务管理应用程序。它有一个名为Task的类,我用它来跟踪任务。它有另一个名为User的类,我用它进行身份验证。

Task有一个名为'user_email'的变量,User有一个名为'email'的变量。我想将这些变量用作foreign_keys。某些任务'user_email'可能实际上不属于用户。我不希望这些关联依赖。

我现在想要关联有很多任务的用户。然后在用户显示页面上显示用户任务。

3 个答案:

答案 0 :(得分:1)

要关联具有多个任务的用户,请将以下行添加到您的用户模型中:

has_many :tasks

现在你还需要照顾协会的另一面。 (即用户的任务)大概你的任务只有一个用户?在这种情况下,任务模型将需要以下行:

belongs_to :user

要详细了解Rails中的关联,建议您查看Rails指南:http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:0)

真的想要使用ID而不是电子邮件来识别任务的所有者。像

这样的东西
class Task
  belongs_to :user
end

class User
  has_many :tasks
end

这要求您将一个名为user_id的整数字段添加到任务表中。


如果您想使用电子邮件识别用户的任务,您仍然可以使用

进行操作
class User
  has_many :tasks, :conditions => ['user_email = #{self.email}']
end

答案 2 :(得分:0)

不确定这是否是处理此问题的最佳方式,但这正是我目前所做的......

我基本上想要显示user_email与其显示页面上当前登录用户的电子邮件相同的任务。

在users_controller.rb

def show
  @user = User.find(params[:id])
  @tasks = Task.where(:user_email => @user.email)
end

在users / show.html.erb

<h1><%= @user.name %></h1>
<% @tasks.each do |task| %>
  <%= task.title %><br />
<% end %>

所以我在不关联模型的情况下完成了我想做的事情。如果有人可以建议更好的方法来做到这一点,请继续。