【问题标题】:Display user_id to username将 user_id 显示为用户名
【发布时间】:2014-05-21 05:06:27
【问题描述】:

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 %>

【问题讨论】:

  • 您的表中是否存在用户名列?
  • @user 未在控制器中的 index 操作中定义

标签: mysql ruby-on-rails activerecord


【解决方案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 %>

&lt;%= post.user_id %&gt;总是会给出整数值(user_id is integer)。如果你想显示associated username,那么你必须做&lt;%= post.user.username %&gt;

注意:格式很抱歉。我喜欢这样。

【讨论】:

  • @user3658789 很高兴为您提供帮助!请接受我的回答:)
  • @RichPeck 很高兴它也对你有所帮助 :)
【解决方案2】:

为了给你更多的输入 - Pavan 描述的与 Rails 中的 ActiveRecord associations 完全有关:

#app/models/post.rb
belongs_to :user

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

这意味着您将能够调用 @post.user.name 来获取用户名或您在 User 模型中拥有的任何属性

--

Delegate

但还有更多!!

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

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

这意味着您将能够直接调用父模型上的委托方法(就像您现在的方式一样)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2023-02-14
    • 1970-01-01
    • 2020-06-17
    • 2020-01-06
    • 2015-05-11
    相关资源
    最近更新 更多