我目前的设置如下:
Company.rb
has_many :applications
application.rb中
belongs_to :company
has_many :answers
并且当公司创建应用程序作为company_id时,它存储company_id。 公司可以在应用程序中创建问题。存储为question_1,question_2和question_3
然后我
Answers.rb
has_many :users
并且包含answer_1,answer_2,answer_3并将user_id存储到应答者。
我在答案中设置了控制器,以便我在
中查看应用程序answers#show
路由:
match '/answers/:id', to: 'answers#show', via: 'get'
所以,当我访问/ answers / 5时,我得到应用程序belongs_to公司,其user_id为1,应用程序属于id为10的应用程序。例如。 我通过 answers / show.html.erb :
显示<%= @application.company_id %>
<%= @application.id %>
现在我在节目中创建了一个如下所示的表单:
<%= form_for @answer do |f| %>
<p>Question 1: <%= @application.question_1 %></p>
<%= f.text_area :answer_1 %><br/>
<p>Question 2: <%= @application.question_2 %></p>
<%= f.text_area :answer_2 %><br/>
<p>Question 3: <%= @application.question_3 %></p>
<%= f.text_area :answer_3 %>
<%= f.submit "Submit" %>
<% end %>
并且 answers_controller.rb 如下所示:
class AnswersController < ApplicationController
before_action :authenticate_user!
def new
@answer = Answer.new
end
def show
@application = Application.find(params[:id])
@answer = Answer.new
end
def create
@answer = Answer.new(answer_params.merge(:user_id => current_user.id))
if @answer.save
redirect_to root_url
else
render 'new'
end
end
private
def answer_params
params.require(:answer).permit(:answer_1, :answer_2, :answer_3)
end
end
所以当我回答一个问题时,它会在数据库中存储它:
当我创建一个应用程序时,它将这样存储在数据库中:
我现在想要的是答案与application_id相关联。我不知道如何进行双重合并,因为我已经从current_user.id获取了user_id。
最终目标是让公司能够查看用户以及他们对应用程序的回答。
那么如何添加它以便我可以保存current_user.id和那些答案所属的application_id。我知道必须有一些简单的方法,因为我的路由已经显示了您正在回答的应用程序。但不确定如何将其添加到数据库(控制器)
答案 0 :(得分:0)
有两种方法可以实现这样的目标:
application_id
,以便在保存答案时自动可用。application/:application_id/answers/:id
。要实现第一个,您只需要添加一个隐藏字段,如:
<%= form_for @answer do |f| %>
<%= f.hidden_field :application_id, value: @application.id %>
<p>Question 1: <%= @application.question_1 %></p>
<%= f.text_area :answer_1 %><br/>
# omitted code.
<%= f.submit "Submit" %>
<% end %>
对于后一种方法的实现,您可以将应答控制器的创建操作嵌套在应用程序资源下。在routes.rb中:
resources :applications do # I am not sure how have you set up routes but if you're using resources than use it.
resources :answers, only: [:create]
end
现在,在你的answers / show.html.erb中将表单声明替换为:
<%= form_for [@application, @answer] do |f| %>
最后,您可以在create action中访问您的应用程序ID:
def create
@application = Application.find(params[:application_id])
@answer = @application.answers.new(answer_params.merge(:user_id => current_user.id))
if @answer.save
redirect_to root_url
else
render 'new'
end
end