Ruby on rails 如何在erb文件中呈现嵌套集合-ruby on rails
我被困了两天 我的问题是: 我无法在.erb处打印嵌套集合对象的值 让我解释一下我的情况:Ruby on rails 如何在erb文件中呈现嵌套集合-ruby on rails,ruby-on-rails,erb,has-many,Ruby On Rails,Erb,Has Many,我被困了两天 我的问题是: 我无法在.erb处打印嵌套集合对象的值 让我解释一下我的情况: 我有学生课和学科课 一个学生有许多科目 用例:我有一个搜索页面,我可以从中搜索(例如:按姓名)学生信息 输出:学生名单。(每个学生都有一份科目表) 问题:在视图部分,at.erb文件:-我可以打印学生姓名,但不能打印科目名称 这是我的文件片段 模型类: class student < ActiveRecord::Base has_many :subjects, :class_name=
- 我有学生课和学科课李>
- 一个学生有许多科目
class student < ActiveRecord::Base
has_many :subjects, :class_name=>"subject"
attr_accessible :first_name, :middle_name, :last_name,
self.table_name="students"
set_primary_key :id
blahblah
end
class subject < ActiveRecord::Base
belongs_to :student, :foreign_key=>'student_id'
attr_accessible :student_id, :name
self.table_name="subjects"
blahblah
end
class-student“主题”
属性可访问:名字,:中间名,:姓氏,
self.table_name=“学生”
设置主密钥:id
布拉布拉赫
结束
类主题'student\u id'
属性可访问:学生id,:名称
self.table_name=“主题”
布拉布拉赫
结束
控制器类:
class StudentController < ApplicationController
require "student.rb"
def populate
@pos=0
filter_query = ''
if !params[:firstName].blank?
filter_query +=" first_name='" + params[:firstName].to_s + "' and"
end
if filter_query !=''
filter_query= filter_query[0..filter_query.length-4]
@stuData= Student.find(:all, :conditions=>filter_query)
end
end
class StudentControllerfilter\u query)
结束
结束
populate.html.erb
div class="header">
<div class="heading" style="float:left;width:900px;">
<% form_tag(:controller=>"student", :action=>"populate") do %>
<table>
<tr>
<td width="10"> <label> First Name:</label> </td>
<td width="40"> <%= text_field_tag('firstName') %> </td>
</tr>
</table>
<input name="submitFormName" class="form_submit" type="submit" value="Search" />
<% end %>
<div height="10"> </div>
</div>
</div>
<div class="students" style="float:left;width:1330px;">
<% if !@stuData.blank? %>
size = <%= @stuData.size %>
<% if !@stuData.nil? %>
<%= render :partial=>'populate' , :locals=>{:stuData => @stuData} %>
<% end %>
<% else %>
<div>Not found...</div>
<% end %>
</div>
<div style="overflow-y:auto;overflow-x:scroll;">
<table >
<thead>
<th>Id</th>
<th>First Name</th>
<th>Middle Name </th>
<th>Last Name</th>
<th>Subject Name</th>
</thead>
<% stuData.each do |item| %>
<tr>
<td id="studentId"> <%= item.id %> </td>
<td id="firstNameId"> <%= item.promotion_code %> </td>
<td id="middleNameId"> </td>
<td id="lastNameId"> </td>
<td id="cityId">
<% @var1 = item.Subject %>
<% if @var1.nil? %>
<% @var1.each do |pc| %>
<%= pc.name %>
<% end %>
<% end %>
</td>
</tr>
<% end %>
</table>
</div>
div class=“header”>
“学生”,操作=>“填充”)do%>
名字:
尺寸=
'填充',:locals=>{:stuData=>@stuData}%>
找不到。。。
_populate.html.erb
div class="header">
<div class="heading" style="float:left;width:900px;">
<% form_tag(:controller=>"student", :action=>"populate") do %>
<table>
<tr>
<td width="10"> <label> First Name:</label> </td>
<td width="40"> <%= text_field_tag('firstName') %> </td>
</tr>
</table>
<input name="submitFormName" class="form_submit" type="submit" value="Search" />
<% end %>
<div height="10"> </div>
</div>
</div>
<div class="students" style="float:left;width:1330px;">
<% if !@stuData.blank? %>
size = <%= @stuData.size %>
<% if !@stuData.nil? %>
<%= render :partial=>'populate' , :locals=>{:stuData => @stuData} %>
<% end %>
<% else %>
<div>Not found...</div>
<% end %>
</div>
<div style="overflow-y:auto;overflow-x:scroll;">
<table >
<thead>
<th>Id</th>
<th>First Name</th>
<th>Middle Name </th>
<th>Last Name</th>
<th>Subject Name</th>
</thead>
<% stuData.each do |item| %>
<tr>
<td id="studentId"> <%= item.id %> </td>
<td id="firstNameId"> <%= item.promotion_code %> </td>
<td id="middleNameId"> </td>
<td id="lastNameId"> </td>
<td id="cityId">
<% @var1 = item.Subject %>
<% if @var1.nil? %>
<% @var1.each do |pc| %>
<%= pc.name %>
<% end %>
<% end %>
</td>
</tr>
<% end %>
</table>
</div>
身份证件
名字
中名
姓
主题名称
当响应包含“集合”,其中“集合的每个对象”包含另一个“集合”时,我不知道如何“呈现页面”
答复:学生名单
收藏品:学生
每个学生对象:包含集合(主题列表)
有人请帮忙
编辑
我尝试了以下方法来呈现集合。。。但不能取得成功
- <%= render :partial=>'populate' , :locals=>{:stuData =>
@stuData} %>
- <%= render :partial=>'populate' , :collection=>
@stuData.subjects %>
- <% render :partial=>'populate' , :collection=>
@stuData.subjects %>
- <%= render @stuData %>
- <%= render :partial=>"populate", :collection=>@stuData,
:as=>:item %>
-'populate',:locals=>{:stuData=>
@stuData}%>
-'填充',:集合=>
@stuData.subjects%>
-'填充',:集合=>
@stuData.subjects%>
-
-“填充”,:collection=>@stuData,
:as=>:项目%>
第二次编辑
由于以下答案无法解决问题。。。。我与数据库和控制台进行了交叉检查。。。看起来还可以
@student = Student.find(144)
=> #<Student id: 4, first_name: "ABC", middle_name: "DEF", last_name: "GHI">
>>
?> @isNullCheck = @student.Subject.nil?
=> false
>>
?> @subList = @student.Subject
=> [#<Subject id: 5, student_id: 4, name: "Maths">, #<Subject id: 6, student_id: 4, name: "English"> ]
>>
?> @StuSub1 = @student.Subject[0]
=> #<Subject id: 5, student_id: 4, name: "Maths">
>>
?> @StuSub2 = @student.Subject[1]
=> #<Subject id: 6, student_id: 4, name: "English">
==
?> @StuSub3 = @student.Subject[2]
=> nil
>>
>> @StuSubValue1 = @student.Subject[0].value
=> Maths
>>
>> @StuSubValue2 = @student.Subject[0].value
=> English
>>
@student=student.find(144)
=> #
>>
?>@isNullCheck=@student.Subject.nil?
=>错误
>>
?>@subList=@student.Subject
=> [#, # ]
>>
?>@StuSub1=@student.Subject[0]
=> #
>>
?>@StuSub2=@student.Subject[1]
=> #
==
?>@StuSub3=@student.Subject[2]
=>零
>>
>>@StuSubValue1=@student.Subject[0]。值
=>数学
>>
>>@StuSubValue2=@student.Subject[0]。值
=>英语
>>
第三次编辑
至少有人能帮助我如何在erb中呈现页面。。。当响应具有对象数组时,其中每个对象本身都包含另一个集合。
(这里是一组学生。每个学生都包含一组科目。)
有人吗?你应该可以这样做
stuData.each do |stud|
stud.name
bla bla bla...
stud.subjects.each do |sub|
sub.name
end
end
相反,您没有使用您在模型中定义的关联
var1 = item.Subject
var1.each ....
编辑:正如你所说的,问题在于你要传递给你的分部的集合。作为“富啄”
建议你,你应该通过一些类似的考试:
<%unless @stuData.nil? %>
<%= render :partial=>'populate', :stuData => @stuData %>
<%end%>
'填充',:stuData=>@stuData%>
型号
班级学生
视图 这将允许您显示以下内容:
@stuData = Student.all
<%= render partial: "populate", collection: @stuData, as: :stuData %>
#_populate.html.erb
<% stuData.each do |student| %>
<%= "#{student.first_name} #{student.last_name}" %>
<% student.subjects.each do |subject| %>
<%= subject.name %>
<% end %>
<% end %>
但我有个例外。。。“当你没有预料到它时,你有一个nil对象!你可能预料到数组的一个实例。计算nil时发生错误。app/views/student/_populate.html.erb的第23行中的每一行:”“第23行是行”“我已经交叉检查了表中的数据。。。看起来还可以。我已经编辑-第二次。。。关于我的交叉检查。如果您要返回数据,那么可能是您没有正确创建@stuData变量。正在为您更新答案“您有一个nil对象,但您没有预料到它!您可能期望数组的一个实例。计算nil时出错。每个”
<% unless @stuData.blank? %>
<%= "size = #{@stuData.size}" %>
<%= render :partial=>'populate' , :locals=>{:stuData => @stuData} unless @stuData.nil? %>
<% else %>
<div>Not found...</div>
<% end %>
def populate
unless params[:firstName].blank?
filter_query +=" first_name='" + params[:firstName].to_s + "' and"
filter_query= filter_query[0..filter_query.length-4]
@stuData = Student.where(first_name: filter_query) unless filter_query.blank?
#only sets @stuData if filter_query is present. It's likely that filter_query is not present for you
end
end