在Rails中设置has_many关联以自动更新

时间:2016-06-01 18:18:02

标签: ruby-on-rails ruby activerecord associations associative-array

首先,对不起的问题抱歉。我正在将一个Sinatra应用程序迁移到Rails,并且遇到一些困难,因为我是Rails方面的新手。

我有两个型号,用户和订单。我已经设置了一个has_many&在模型中的belongs_to关联,我在订单中添加了一个user_id关联列。

但是我觉得用户也应该有某种关联列呢? (虽然我不知道如何设置它)

具体来说,我希望能够查看订单,并告诉客户之前是否已经订购过:

<% @orders.each do |order| %>
<% if (order.user.orders > 1) %> Y<% end %>
<% end %>

但是当我可以联系到用户时,我无法访问他们所关联的所有订单。如何设置列来执行此操作,最好在为其分配新订单时自动更新?

2 个答案:

答案 0 :(得分:1)

这是父母的情况。用户是父,订单是孩子。父母不存储外键,只存储子女。如果您正确设置了模型,则User应具有has_many。然后你应该能够:

user.orders

只要新订单正确存储了user_id,所有这些都应该正常工作。

答案 1 :(得分:1)

现在你的模型就足够了:

class Order < ActiveRecord::Base
  belongs_to :user # foreign_key user_id
end

class User < ActiveRecord::Base
  has_many :orders
end

您的观看代码:

<% @orders.each do |order| %>
  <% if order.user %>
    Y
  <% end %>
<% end %>

如果订单不属于用户,order.user将为零,所以如果不是nil,则订单属于用户,且用户至少有1个订单!

否则,如果您想检查用户是否有任何订单,请执行以下操作:

user.orders.count > 0