我有一张名为" 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
我要做的就是在主题下拉列表中选择选项,从主题模型中填充,以在备注表上显示/打印。我是铁路的新手。非常感谢任何帮助,并会在需要时提供更多代码。谢谢!
答案 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
这将以读者友好的方式返回您的枚举中所有主题(用空格代替下划线等)。枚举可能很棘手,但是为模型生成可能值的已定义列表的好方法属性(例如您的案例中的注释主题)。这样你甚至不需要主题模型。