Rails索引方法显示具有子记录的父级

时间:2014-04-18 20:14:13

标签: ruby-on-rails

知道这是一个愚蠢的问题,但我找不到我正在寻找的东西。

我有两个模型:父母和孩子

class child < ActiveRecord::Base
  belongs_to :parent
end

class parent < ActiveRecord::Base
  has_many :childs
end
子控制器索引操作中的

我想从父模型中显示每个查询记录的字段。

def index
  @childs = Childs.all
end

如何在包含子记录的视图中显示parent_name?

例如:

<%= @childs.each do |c| %>
  <%= child.name %>
  <%= child.parent.name %>
<% end %>

2 个答案:

答案 0 :(得分:2)

以下是我在您的代码中找到的问题列表。

  • 您的型号名称应大写。
  • 设置关联时,childs应为children
  • 设置@childs时,您应该将模型引用为Child,而不是Childs
  • 您已使用c循环浏览子项的每条记录,但您将其引用为child
  • 第一行不需要<%=

纠正这些应该是这样的,它应该工作。如果您遇到其他问题,请发布错误消息和相关代码。

<强>模型

class Child < ActiveRecord::Base
  belongs_to :parent
end

class Parent < ActiveRecord::Base
  has_many :children
end

<强>控制器

def index
  @childs = Child.all
end

查看

<% @childs.each do |child| %>
  <%= child.name %>
  <%= child.parent.name %>
<% end %>

答案 1 :(得分:0)

如果您使用的是nil类,则可能是因为您的:parent_id在创建记录时没有携带父母的ID。

您可以转到Rails控制台并输入“ Child.all”,以查看您所有的:parent_ids是否均为零。

我自己有一个用户模型has_many:tweets,每个推文模型都属于:user。在我的tweet.controller.rb中,按如下所示设置def create,以便在:user_id列中输入用户ID:

def create
    @tweet = current_user.tweets.new(tweet_params)
    if @tweet.save
      flash[:notice] = "You've updated with a tweet."
      redirect_to admin_tweets_path
    else
      @tweets = Tweet.all
      render :index
    end
  end