我有三个表 - 结果,feedback_qs和feedback_qs_results(连接表)。给定现有结果和feedback_qs,我想用join_id,feedback_q_id和后续答案(text_area)填充连接表。
我相信这些关系是正确的......
# result.rb
has_many :feedback_q_results
has_many :feedback_qs, :through => :feedback_q_results
# feedback_q.rb
has_many :feedback_q_results
has_many :results, :through => :feedback_q_results
# feedback_q_result.rb
belongs_to :result
belongs_to :feedback_q
我可以通过下面的config / routes.rb访问result_id(result / result.id / feedback)...
resources :results do
member do
get 'feedback'
post 'feedback_create'
end
end
这个表单填充连接表会是什么样子?类似的东西(我意识到这不是正确的)......?如何通过post_controller接收数据以填充连接表?或者它应该通过另一个控制器?
<%= form_for :result, url: feedback_create_result_path(result), method: :post do |form| %>
<% for q in FeedbackQ.all %>
<div class="col field">
<p>
<%= form.label q.question_text %>
</p>
<%= text_area_tag id: q.id %>
</div>
<% end %>
<div class="actions">
<%= form.submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>
我的feedback_create方法会是什么样子?虽然我已经看到了几个关于rails&#39;多对多关系和填充连接表,这些用例似乎都不适合我的需要。提前谢谢。
更新 - 我的用例是:用户参加考试(称为结果),然后他们通过回答反馈问题来审核监考人。我想在连接表中记录反馈
答案 0 :(得分:0)
如果你的has_many关联工作正常,那么你应该能够在rails控制台中执行以下操作:
> result.feedback_qs
=> []
和
> feedback_q.results
=> []
result
和feedback_q
分别是Result
和FeedbackQ
个对象。
要将feedback_q与结果相关联,只需:
> result.feedback_qs << feedback_q
这应该在feedback_q_result
表中创建一条记录。
现在,当你做
> result.feedback_qs
它应该返回您刚添加的feedback_q
记录。
答案 1 :(得分:0)
我改变了原来的模特。我遇到的一个问题是rails中的简单命名约定,因此我简化了表名以消除等式。新车型:
# result.rb
has_many :feedbacks
has_many :questions, :through => :feedbacks
# question.rb
has_many :feedbacks
has_many :results, :through => :feedbacks
# feedback.rb
belongs_to :question
belongs_to :result
validates_uniqueness_of :question_id, scope: :result_id
在我看来形式:
<%= form_for :result, url: feedback_create_result_path(result), method: :post do |form| %>
<% Question.all.each do |question| %>
<div class="col field">
<p>
<%= form.label :question, question.question_text %>
</p>
<%= hidden_field_tag 'question[][id]', question.id %>
<%= text_area_tag 'question[][answer]', "", id: "question_" + question.id.to_s, class: "stretch_textarea" %>
</div>
<% end %>
<div class="actions">
<%= form.submit "Submit", class: "btn btn-primary" %>
</div>
这个SO page帮助了很多。