Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 参数空白的Rails字段_Ruby On Rails_Ruby On Rails 4_Nested Forms_Form For - Fatal编程技术网

Ruby on rails 参数空白的Rails字段

Ruby on rails 参数空白的Rails字段,ruby-on-rails,ruby-on-rails-4,nested-forms,form-for,Ruby On Rails,Ruby On Rails 4,Nested Forms,Form For,我正在尝试为调查构建嵌套表单,但在块的字段\u中,我的参数散列缺少值时出现问题 我有以下几种型号。应用程序的工作方式是管理员创建一个MiniPost及其MiniPostQuestions。然后,客户端使用一个minipost创建一个新的MiniPostSurvey。然后,客户端通过电子邮件向用户发送SurveyInvites。当用户响应时,将创建一个新的SurveyResponse,并为调查中的每个MiniPostQuestion创建一个新的QuestionResponse class Mini

我正在尝试为调查构建嵌套表单,但在
块的
字段\u中,我的参数散列缺少值时出现问题

我有以下几种型号。应用程序的工作方式是管理员创建一个
MiniPost
及其
MiniPostQuestions
。然后,客户端使用一个
minipost
创建一个新的
MiniPostSurvey
。然后,客户端通过电子邮件向用户发送
SurveyInvites
。当用户响应时,将创建一个新的
SurveyResponse
,并为调查中的每个
MiniPostQuestion
创建一个新的
QuestionResponse

class MiniPost < ActiveRecord::Base
    has_many :mini_post_questions
    has_many :question_answers, through: :mini_post_questions
    has_many :mini_post_surveys

    belongs_to :employer

    def questions
        mini_post_questions
    end

    def surveys
        mini_post_surveys
    end
end

class MiniPostQuestion < ActiveRecord::Base
    has_many :question_answers

    belongs_to :mini_post
    belongs_to :employer

    def answers
        question_answers
    end
end

class MiniPostSurvey < ActiveRecord::Base
    belongs_to :mini_post
    belongs_to :employer
    belongs_to :company
    has_many :survey_invites
    has_many :survey_responses, through: :survey_invites

    def questions
        mini_post.questions
    end
end

class SurveyInvite < ActiveRecord::Base
    belongs_to :mini_post_survey
    has_many :survey_responses

    def responses
        survey_responses
    end
end

class SurveyResponse < ActiveRecord::Base
    belongs_to :survey_invite
    has_many :question_answers
    has_many :mini_post_questions, through: :question_answers
end

class QuestionAnswer < ActiveRecord::Base
    belongs_to :survey_response
    belongs_to :mini_post_question
    validates :answer, presence: true
end

我希望每个问题都有一个
mini\u post\u question
键,但我不确定如何达到这一点。

我认为您的思路是正确的,但您需要让模型接受表单中所需对象的嵌套属性

因此,我认为在您的
调查响应
模型中,您应该

class SurveyResponse < ActiveRecord::Base
  belongs_to :survey_invite
  has_many :question_answers
  accepts_nested_attributes_for :question_answers
  has_many :mini_post_questions, through: :question_answers
end
class SurveyResponse
另外,因为看起来您没有在这里修改迷你问题,我想说的是,您不需要接受问题的嵌套属性,只需要有一个隐藏字段,将迷你问题id分配给问题答案

所以你的表格应该是这样的

<div class="form-box">
  <%= form_for @response, url: "/survey?key=#{@invite.key}", method: :post, html: { role: 'form' } do |f| %>
      <% @questions.each do |question| %>
          <div class="form-group">
              <%= f.fields_for :question_answers, @survey.question_answers.build do |q| %>
                  <%= q.label question.question %>
                  <%= q.text_area :answer, class: 'form-control' %>
                  <%= q.hidden_field :mini_post_question_id, value: question.id %>
              <% end %>
          </div>
      <% end %>

      <div><%= f.submit "Submit", :class => "btn btn-primary" %></div>
  <% end %>
</div>

“btn btn主要”%>
由于表单接受问题答案的嵌套属性,因此不需要提供调查id


这会让你更接近你的状态。

太棒了!谢谢事后看来,我真不敢相信我忘记添加
接受嵌套的属性了,因为它非常基本,但是表单结构非常复杂。我很高兴这对您有所帮助:)
class SurveyResponse < ActiveRecord::Base
  belongs_to :survey_invite
  has_many :question_answers
  accepts_nested_attributes_for :question_answers
  has_many :mini_post_questions, through: :question_answers
end
<div class="form-box">
  <%= form_for @response, url: "/survey?key=#{@invite.key}", method: :post, html: { role: 'form' } do |f| %>
      <% @questions.each do |question| %>
          <div class="form-group">
              <%= f.fields_for :question_answers, @survey.question_answers.build do |q| %>
                  <%= q.label question.question %>
                  <%= q.text_area :answer, class: 'form-control' %>
                  <%= q.hidden_field :mini_post_question_id, value: question.id %>
              <% end %>
          </div>
      <% end %>

      <div><%= f.submit "Submit", :class => "btn btn-primary" %></div>
  <% end %>
</div>