首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 5:显示对象值而不是ID

Rails 5:显示对象值而不是ID
EN

Stack Overflow用户
提问于 2018-02-23 03:17:50
回答 2查看 48关注 0票数 0

我有一款简单的跳伞应用程序。降落伞包装工跟踪他们的包装工作。每个降落伞钻机有几个包件。

我通过在平台细节(即反射#2)下显示rig_type_number,使显示视图工作得很好,但我只能让rig_id在索引的同一列中工作。理想情况下,我也希望使用rig_type_number而不是ID。

如何在视图中引用@rigs.rig_type_number?的效果?

这对我来说是有道理的,但不管用:

代码语言:javascript
复制
<td><%= link_to packjob.rig_id,rig_path(rig.rig_type_number) %>

我必须为索引控制器设置where子句吗?

db:

代码语言:javascript
复制
class CreatePackjobs < ActiveRecord::Migration[5.1]
  def change
    create_table :packjobs do |t|
      t.string :packer
      t.string :rig
      t.references :rig, foreign_key: true

      t.timestamps
    end

  end
end

class CreateRigs < ActiveRecord::Migration[5.1]
  def change
    create_table :rigs do |t|
      t.boolean :rig_status
      t.string :rig_type_number
      t.integer :rig_season_jumpnum
      t.date :rig_res_last
      t.string :rig_res_who

      t.timestamps
    end
  end
end

packjobs_controller:

代码语言:javascript
复制
class PackjobsController < ApplicationController
  def index
    @packjobs = Packjob.paginate(page: params[:page]).order('id DESC') 
    @rigs = Rig.where(rig_status: "t")
  end

  def show
    @packjob = Packjob.find(params[:id])
    @rig = Rig.find(@packjob.rig_id)
  end

  def new
    @packjob = Packjob.new
    @rigs = Rig.where(rig_status: "t")
  end

  def edit
    @packjob = Packjob.find(params[:id])
    @rigs = Rig.where(rig_status: "t")
  end

  def create
    @packjob = Packjob.new(packjob_params)
    @rigs = Rig.where(rig_status: "t")
    if @packjob.save
      redirect_to @packjob
    else
      render 'new'
    end
  end


  def update
    @packjob = Packjob.find(params[:id])
    @rigs = Rig.where(rig_status: "t")
    if @packjob.update(packjob_params)
      redirect_to @packjob
    else
      render 'edit'
    end
  end


  def destroy
    @packjob = Packjob.find(params[:id])
    @packjob.destroy

    redirect_to packjobs_path
  end

  private
    def packjob_params
      params.require(:packjob).permit(:packer, :rig_id)
    end

    def rigs_params
      params.require(:rig).permit(:rig_status, :rig_type_number)
    end


end

show.html.erb:

代码语言:javascript
复制
<p>
   <b>Datestamp:</b>
   <%= @packjob.created_at.strftime("%m/%d/%Y %I:%M %P") %><br>
</p>
<p>
  <strong>Packer:</strong>
  <%= @packjob.packer %>
</p>

<p>
  <strong>Rig:</strong>
  <%= @rig.rig_type_number %><br>
</p>

<%= link_to 'Edit', edit_packjob_path(@packjob) %> |
<%= link_to 'Back', packjobs_path %>

index.html.erb:

代码语言:javascript
复制
<h1>Listing Packjobs</h1>

<%= link_to 'New Packjob', new_packjob_path %> | <br>

<br>

<div class="digg_pagination">
  <%= will_paginate @packjobs, :container => false %>
</div>

<table id=listtable CELLPADDING="4" border="1">
  <tr class="headerBlue" >
    <th>Datestamp</th>
    <th>Packer</th>
    <th>Rig</th>
    <th colspan="3"></th>
  </tr>

  <% @packjobs.each do |packjob| %>
  <tr class="<%= cycle('rowA', 'rowB') %>">
        <td><%= link_to packjob.created_at.strftime("%m/%d/%Y %I:%M:%S %P"),packjob_path(packjob.id) %></td>
        <td><%= packjob.packer %></td>
        <td><%= link_to packjob.rig_id,rig_path(packjob.rig_id) %>
        <td><%= link_to 'Show', packjob_path(packjob) %></td>
        <td><%= link_to 'Edit', edit_packjob_path(packjob) %></td>
        <td><%= link_to 'Destroy', packjob_path(packjob),
          method: :delete,
          data: { confirm: 'Are you sure?' } %></td>

    <% end %>
  </tr>
</table>
<div class="digg_pagination">
  <div class="page_info">
    <%= page_entries_info @packjobs %>
  </div>
  <%= will_paginate @packjobs,  :container => false %>
</div>

<br><%= link_to 'New Packjob', new_packjob_path %> |

编辑:

模型:

代码语言:javascript
复制
class Packjob < ApplicationRecord

  belongs_to :rig
  validates :packer, presence: true
  validates :rig_id, presence: true

  self.per_page = 25
end

class Rig < ApplicationRecord
  has_many :packjobs
  validates :rig_type_number, presence: true
  self.per_page = 25

end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-23 04:12:33

如果正确设置了关联,则可以引用以下关联对象:

代码语言:javascript
复制
<td><%= link_to packjob.rig.rig_type_number,rig_path(packjob.rig_id) %>
票数 2
EN

Stack Overflow用户

发布于 2018-02-23 04:00:46

您可以按下面的方式调用它,以防在PackJob模型中有PackJob关联:

代码语言:javascript
复制
<td><%= link_to packjob..rig.rig_type_number,rig_path(packjob.rig_id) if packjob.rig.present? %> </td>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48940581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档