RoR:如何在桌面上显示/打印其他模型的数据?

时间:2015-08-29 14:55:08

标签: ruby-on-rails ruby ruby-on-rails-4

我有一张名为" Notes"以及_form.html.erb中的下拉列表,其中包含一个名为subject的模型中的主题列表。

<div class="field">
    <%= f.label :subject, class: 'dropdown' %>
      <div class="dropdown">
      <div class="field">

        <%= f.collection_select(:id, Subject.all, :id, :subject) %>

  </div>

问题是我无法将其打印到&#34; show&#34;或者&#34;表&#34;我想知道怎么做?

备注索引视图:

<tbody>
    <% @notes.each do |note| %>
      <tr>
        <td><%= note.created_at.localtime %></td>
        <td><%= note.updated_at.localtime %></td>
        <td><%= note.user_id %></td>
        <td><%= note.user.full_name %></td>
        <td><%= note.user.email %></td>
        <td><%= note.studentname %></td>
        **<td><%= note.subject.subject %></td>**
        <td><%= note.grievance %></td>
        <td><%= note.penalty %></td>
        <td><%= link_to 'Show', note, class: 'btn btn-primary btn-xs' %></td>

我知道我必须在notes_controller中定义主题模型。我一直试图这样做但没有成功。

  def subject
    @subject = Subject.all
  end

主题架构

create_table "subjects", force: :cascade do |t|
    t.string   "subject"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

我要做的就是在主题下拉列表中选择选项,从主题模型中填充,以在备注表上显示/打印。我是铁路的新手。非常感谢任何帮助,并会在需要时提供更多代码。谢谢!

2 个答案:

答案 0 :(得分:0)

 <%= f.collection_select(:subjectid, Subject.all, :id, :subject) %> 

应包含一个名称作为第一个参数。在选择@notes的控制器方法中,此值可用于选择该主题的特定注释。

@notes = Note.find_by_subjectid(:subjectid)

希望这有帮助,如果没有请在你的问题中更具体一点

答案 1 :(得分:0)

看起来您正在寻找“has_one”Active Record Association。为了能够呼叫note.subject,您需要设置此关联。以下是http://guides.rubyonrails.org/association_basics.html的内容。

class Notes < ActiveRecord::Base
  has_one :subject
end

您还需要一个类似于此的数据库迁移:

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_reference :subjects, :notes, index: true
  end
end

如果您确实需要主题模型,则可以选择此选项。如果您只是尝试仅允许某些输入(通过您的下拉列表)并且不需要您的主题实际上是模型,您可能需要查看枚举: http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html。在这种情况下,您只需在Notes模型(model / notes.rb)中声明一个枚举,如下所示:

 enum subject: [ :none, :math, :science, :history, ...etc ]

这允许您致电:

<%= f.select :subject, options_for_select(Notes.subject_array) %>

其中subject_array是在Notes模型中声明的方法,如下所示:

def subject_array
  a = Notes.subjects.map do |k,v|
    [k.humanize, k]
  end
  return a
end  

这将以读者友好的方式返回您的枚举中所有主题(用空格代替下划线等)。枚举可能很棘手,但是为模型生成可能值的已定义列表的好方法属性(例如您的案例中的注释主题)。这样你甚至不需要主题模型。