Ruby on Rails,显示来自多个模型实例的多个属性

时间:2016-05-04 14:47:15

标签: ruby-on-rails ruby

在我的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

3 个答案:

答案 0 :(得分:1)

你忘记了一个等号。你应该这样做:

<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等在控制器操作中初始化。如果您将q1q2等作为Proposal模型上的属性,那么您应该执行以下操作,而不是使用@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>

答案 1 :(得分:0)

您向后使用<%=<%<%=将内容输出到页面。 <%运行Ruby代码,但不输出任何内容。

目前,您输出的结果为<%= @country.proposals.each,而您输出<% @proposals_q1。这意味着,在循环内部,行<% @proposals_q1 %>完全没有效果,但在整个循环完成后,<%= @country.proposals.each...会输出proposals

您需要使用<%= @proposals_q1 %>在循环中写入的标记内输出该变量的内容,并且需要使用<% @country.proposals.each... %>,因为使用的<%=没有生成有用的输出object1.position.copy(object2.matrixWorld.getPosition());

答案 2 :(得分:-1)

将此

&lt;%@ proposals_q1%&gt;

“更改为:”

&lt;%= @ proposals_q1%&gt;