首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法向rails 5应用程序中的连接表添加行

无法向rails 5应用程序中的连接表添加行
EN

Stack Overflow用户
提问于 2018-05-30 22:38:42
回答 2查看 67关注 0票数 0

我有三个表- result、feedback_qs和feedback_qs_results (join表)。给定一个已有的结果和feedback_qs,我想用result_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

我可以通过下面的result_id /routes.rb访问结果(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的多对多关系和填充连接表的问题,但这些用例似乎都不适合我的需要。提前谢谢。

更新-我的用例是这样的:用户参加一次考试(称为结果),然后他们通过回答反馈问题来审查监考者。我想在连接表中记录反馈

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-05 05:06:31

我改变了我的原始模型。我遇到的一个问题是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也帮了不少忙。

票数 0
EN

Stack Overflow用户

发布于 2018-05-30 23:20:14

如果您的has_many关联工作正常,那么在rails控制台中,您应该能够执行以下操作:

> result.feedback_qs
=> []

> feedback_q.results
=> []

其中resultfeedback_q分别是ResultFeedbackQ对象。

要将feedback_q与结果关联,只需执行以下操作:

> result.feedback_qs << feedback_q

这将在feedback_q_result表中创建一条记录。现在,当你这样做的时候

> result.feedback_qs

它应该返回您刚刚添加的feedback_q记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50607452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档