[英]Ruby on Rails, displaying multiple attributes from multiple model instances
在我的Ruby on Rails项目中,我有一个Country模型类和一个Proposal模型类。 每个国家/地区都有许多提案,每个提案都属于一个国家/地区。 每个提案有30个问题(属性)。 在我的查看页面中,我想显示一个国家提出的每个提案的每个问题。
到目前为止,我有:
<div class="relative">
<% @country.proposals.each do |proposal| %>
<h2>Food and Medicine:</h2><br>
<div class="relative2">
<p>List of prohibited drugs:</p>
<p><% proposal.q1 %></p>
</div>
<h2>Liquids and Gels:</h2><br>
<div class="relative2">
<p>List of prohibited liquids/gels:</p>
<p><% proposal.q2 %></p>
...
...
<% end %>
</div>
只要该国家有与其相关的提案,标题就可以很好地显示。 但是,投标属性没有出现在我放置它们的位置(在标题之间)。 我可以确认属性不为空。
提案表:
create_table "proposals", force: :cascade do |t|
t.string "status", default: "Pending"
t.text "q1"
t.text "q2"
...
...
t.text "q29"
t.text "q30"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "country_id"
end
你忘记了等号。 你应该做:
<p><%= @proposals_q2 %></p>
代替:
<p><% @proposals_q2 %></p>
另外,您应该从循环中删除等号。
<% @country.proposals.each do |proposals| %>
代替:
<%= @country.proposals.each do |proposals| %>
在ERB中, <%= expression %>
用于将评估后的表达式注入DOM。 <% expression %>
用于评估表达式,不对其执行任何操作。 您不希望在第一行对@country.proposals.each {...}
的结果求值并注入到DOM中,因此您希望它没有等号,而您确实希望每个实例变量被注入到DOM中,因此您希望它们具有等号。
顺便说一句,我假设@proposals_q1
, @proposals_q2
等在控制器操作中已初始化。 相反,如果您在Proposal
模型上将q1
, q2
等作为属性,那么应该使用以下方法代替使用@proposals_q1
:
<div class="relative">
<% @country.proposals.each do |proposal| %>
<h2>Food and Medicine:</h2><br>
<div class="relative2">
<p>List of prohibited drugs:</p>
<p><%= proposal.q1 %></p>
</div>
<h2>Liquids and Gels:</h2><br>
<div class="relative2">
<p>List of prohibited liquids/gels:</p>
<p><%= proposal.q2 %></p>
...
...
<% end %>
</div>
您正在反向使用<%=
和<%
。 <%=
输出到页面。 <%
运行Ruby代码,但不输出任何内容。
就目前而言,您正在输出<%= @country.proposals.each
的结果,而没有输出<% @proposals_q1
。 这意味着,在循环内部,行<% @proposals_q1 %>
绝对无效,但是在完成整个循环之后, <%= @country.proposals.each...
输出proposals
。
您需要使用<%= @proposals_q1 %>
来输出该变量的内容,并在循环内部编写的标记内,并且您需要使用<% @country.proposals.each... %>
因为没有使用<%=
产生的有用输出。
改变这个
<%@ proposals_q1%>
“对此:”<%= @ proposals_q1%>
”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.