Rails:显示完整对象而不是参数

时间:2019-05-03 07:52:24

标签: ruby-on-rails

我有一个Web应用程序,其中显示questionsoptions。问题在于options会显示整个对象以及该对象的body参数。我不知道这里发生了什么。与serializingdeserializing有关吗?

index.html.erb

 <tbody>
    <% @questions.each do |question| %>
      <tr>
        <td><%= question.body %></td>
        <td><%= question.user.email %></td>
        <td>
          <%= question.options.each do |p| %>  
            <%= radio_button_tag('option',p.id) %>
            <%= p.body %>
          <% end %>

        </td>

        <td><%= link_to 'Show', question %></td>
        <% if current_user && current_user.admin %>
          <td><%= link_to 'Edit', edit_question_path(question) %></td>
          <td><%= link_to 'Destroy', question, method: :delete, data: { confirm: 'Are you sure?' } %></td>          
        <% end %>

      </tr>
      <tr>

      </tr>
    <% end %>
  </tbody>

controller_params

private

    def set_question
      @question = Question.find(params[:id])
    end


    def question_params
      params.require(:question).permit(:body, options_attributes: [:body])
    end

模型

class Question < ApplicationRecord
  belongs_to :user
  has_many :options, dependent: :delete_all, :autosave => true
  validates_length_of :options, maximum: 4
  accepts_nested_attributes_for :options
end

输出

enter image description here

1 个答案:

答案 0 :(得分:2)

<%= question.options.each do |p| %>  
  <%= radio_button_tag('option',p.id) %>
  <%= p.body %>
<% end %>

您的问题是与此块有关。 ERB的第一部分是告诉视图渲染question.options.each以及后续的HTML,从而导致对象本身被渲染。更改为:

<% question.options.each do |p| %>  
  <%= radio_button_tag('option',p.id) %>
  <%= p.body %>
<% end %>

将解决您的问题。