嵌套路由,通过关联查询

时间:2014-05-30 07:22:26

标签: ruby-on-rails ruby-on-rails-4

我有以下模型结构:

USER
has_many :items
has_many :payments

ITEM
belongs_to :user
has_many :payments

PAYMENT
belongs_to user
belongs_to listing

因此,一个 USER 可以是 PAYMENT 的创建者,而另一个可以访问相同的 PAYMENT ,但作为接收者付款(通过他拥有的项目)

如何在此处组织路线和控制器以区分两者并以干净的方式查询模型?

我尝试了嵌套路由以实现完整的RESTFUL路由:

/items/x/payment/y

...但我什么都没得到......我总是在同一个控制器上调用相同的方法,我必须得到用户的付款和所有PAYMENTS用户的项目。另外,我读了一篇很棒的文章,认为嵌套不应该超过1级,事实是我并不真正关心是否使用/payment/3或更长版本来显示付款3。

我关心的是保持我的代码库可维护:)我是RoR的新手,但我清楚的是Rails中的东西总是有很好的解决方案:p

我目前所拥有的是:ItemsController#show我致电Payment.as_payer(current_user)Payment.as_payer(current_user),而预订模式实施了这两种方法,可以返回所有付款方式用户通过项目创建或接收...

欢迎任何有关该体系结构的建议:)路由,控制器,模型,范围...

1 个答案:

答案 0 :(得分:0)

请在您的视图中执行以下操作,尝试仅显示当前用户的付款。

<% @user.payments.each do |payments| %>

获取用户项目的付款:

<% @user.items.each do |item|  %>
    <% item.payments each do |payment|  %>
    ....your view code...
    <% end %>
<% end %>