将user_id显示为用户名

时间:2014-05-21 05:06:27

标签: mysql ruby-on-rails activerecord

Rails新手在这里。我在发帖时试图显示用户名。但是,它会继续显示user_id(整数)。我想显示他们的实际名字。我正确地连接了一切。这是代码。感谢。

post / index.html.erb中的

..... @ user.username将显示未定义的方法错误。

    <%= render 'layouts/header' %>

    <!--posts table!-->
    <div class="container">
      <% @posts.each do |post| %>
        <div class="panel panel-info">
          <div class="panel-heading">
            <h3 class="panel-title">
              <%= post.title %>
          <div class="pull-right">
            <%= @user.username %> |
            <%= time_ago_in_words(Time.now) %>
          </div>
        </h3>
      </div>  
      <div class="panel-body">
        <%= post.description %>
      </div>
    </div>
  <% end %>

2 个答案:

答案 0 :(得分:1)

应该是

<%= post.user.username %>
<!--posts table!-->
<div class="container">
<% @posts.each do |post| %>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<%= post.title %>
<div class="pull-right">
<%= post.user.username %> | #here
<%= time_ago_in_words(Time.now) %>
</div>
</h3>
</div>  
<div class="panel-body">
<%= post.description %>
</div>
</div>
<% end %>

<%= post.user_id %>将始终提供整数值( user_id is integer )。如果您想要显示 associated username ,那么您必须做<%= post.user.username %>

注意:抱歉格式。我喜欢它。

答案 1 :(得分:1)

为您提供更多输入 - Pavan描述的内容与Rails中的ActiveRecord associations有关:

#app/models/post.rb
belongs_to :user

这将在您的父对象(@post.user)上创建另一个方法,该方法将填充父对象中foreign_key引用的数据。例如,您的user_id模型中有Post - 将被翻译为.user以便在您的视图中使用

这意味着您可以致电@post.user.name来获取User型号中的用户名或属性

-

Delegate

但还有更多!!

您将从.delegate方法中受益 - 这基本上允许您将关联控制器中的方法视为父级方法:

#app/models/post.rb
belongs_to :user
delegate :name, to: :user, prefix: true #-> creates post.user_name

这意味着您可以直接在父模型上调用委托方法(就像您现在如何获得它一样)