Rails has_many并且在单个视图中属于两次

时间:2017-03-02 02:16:32

标签: ruby-on-rails

在我的数据库中,袜子有很多鞋子。一双鞋子有很多鞋带。

  create_table "socks", force: :cascade do |t|
    t.string   "sock_name"
  end

  create_table "shoes", force: :cascade do |t|
    t.integer  "sock_id"
    t.string   "shoe_name"
  end

  create_table "shoelaces", force: :cascade do |t|
    t.integer  "shoe_id"
    t.integer  "shoelace_name"
  end

在袜子视图中,我想展示袜子所拥有的所有鞋子以及鞋子拥有的所有鞋带。

在我的控制器中我有:

def show
  @sock = Sock.find(params[:id])
  @shoes = @sock.shoes
  @shoelaces = Shoelace.where(shoe: @shoes)
end

我现在正在运行这样的事情:

<% @shoes.each do |shoe| %>     
  <%= shoe.shoe_name %>
  <%= Shoelace.where(shoe: shoe).shoelace_name %>
<% end %>

如何在一个.each中显示属于我的鞋子的鞋带,以便它们在我的视图中在一起而不需要在控制器外面查询?如果我的鞋带有多个字符串,这种方法会适用吗?

1 个答案:

答案 0 :(得分:1)

你可以在你的鞋子模型中找到一些东西,例如:

def shoelaces_for_shoe
  Shoelace.where(shoe_id: id).shoelace_name
end

然后在你看来:

<% @shoes.each do |shoe| %>     
  <%= shoe.shoe_name %>
  <%= @shoe.shoelaces_for_shoe %>
<% end %>