【问题标题】:Rails 4 - Displaying associated attribute (without all attributes in associated table)Rails 4 - 显示关联属性(关联表中没有所有属性)
【发布时间】:2016-02-20 07:28:33
【问题描述】:

我正在尝试在 Rails 4 中制作应用程序。

我有一个档案模型。

我正在尝试在该个人资料显示页面中显示用户的角色。

我有三个模型:

用户

 rolify (which has a user_role join table)

角色

has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true

简介

belongs_to :user

在我的个人资料显示页面中,我有:

<%= @profile.user.roles.each do |role|  %>
    <%= role.name.titlecase %> <span style= "margin-right: 30px"></span>
<% end %>

在显示视图中,我得到:

Manager [#<Role id: 9, name: "faculty_manager", resource_id: nil, resource_type: nil, created_at: "2016-01-16 08:06:55", updated_at: "2016-01-16 08:06:55">]

“经理”部分是唯一正确的部分。如何让显示页面不列出角色表中的所有其他属性?

【问题讨论】:

    标签: ruby-on-rails associations model-associations


    【解决方案1】:

    你有 &lt;%= @profile 而不仅仅是 &lt;% @profile 它将枚举器的结果放在视图中

    <% @profile.user.roles.each do |role|  %>
        <%= role.name.titlecase %> <span style= "margin-right: 30px"></span>
    <% end %>
    

    如果您只想为每个角色获取name,请执行此操作

    <% @profile.user.roles.pluck(:name).each do |role_name| %>
    

    【讨论】:

    • 故意使用@profile。如果您只执行本地操作,则会出现名称错误:未定义的局部变量或方法“配置文件”。我可以看到关联正在工作,因为它正确地检索了正确表的属性 - 但我只想要这些属性中的 1 个。我想知道如何排除其他属性。
    • @user2860931 这是一个错字,已修复
    • @user2860931 我也更新了答案以仅从 DB 中获取 name 字段
    • 第二种方法不起作用 - 它只是显示一个空格(没有错误)。不过谢谢 - 第一种方法有效
    【解决方案2】:

    要将您的显示页面设置为漂亮的表格视图格式,请在显示页面代码中执行以下操作:

    错误是使用 = @profile.user.roles.each do |role| %> 注意你使用的=

    <table class="table ld-margin-top-20">
        <thead>
        <tr>
          <th>Manager ID</th>
          <th>Manger Name</th>
          <th>Manger Resource ID</th>
          <th>Manger Resource Type</th>
        </tr>
        </thead>
        <tbody>
        <% @profile.user.roles.each do |role| %>
            <tr>
              <td> <%= role.id %></td>
              <td> <%= role.name.titlecase %></td>
              <td><%= role.resource_id %></td>
              <td><%= role.resource_type %></td>
            </tr>
        <% end %>
        </tbody>
      </table>
    

    【讨论】:

    • @user2860931 我有一个请求,如果某些答案对您有所帮助或不只是承认它,这会改善我们的 stackoverflow 社区,而不是不断地使用 SO 提问并从中受益。
    • css 中的“=”符号对我有用。这是一个错字,现在已更正,但我的问题的实质不是如何在角色表中显示每个属性。恰恰相反。我只想显示“名称”。我想我只是在问“名字”,但它给了我一切。我想排除其余的。
    • 您可以选择是否要显示所有详细信息,如果您不需要列,只需将其从代码中删除即可。
    • 考虑到我只要求一个属性,这并没有什么帮助。不管怎么说,还是要谢谢你。上面的另一个答案为我解决了。
    • 选择最适合您的答案完全取决于您的选择,没问题...!但是请记住,如果您以后想显示任何与管理器相关的字段,该代码对您不起作用,因为它只选择关联的名称。再见。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2019-09-11
    • 2023-03-26
    相关资源
    最近更新 更多