如何一次合并2个ID

时间:2014-06-23 12:05:17

标签: mysql ruby-on-rails ruby ruby-on-rails-3

我目前的设置如下:

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

所以当我回答一个问题时,它会在数据库中存储它:

http://s1.postimg.org/qsl2e5wj3/Screen_Shot_2014_06_23_at_14_02_06.png

当我创建一个应用程序时,它将这样存储在数据库中:

http://s11.postimg.org/ia1snyh4z/Screen_Shot_2014_06_23_at_14_02_58.png

我现在想要的是答案与application_id相关联。我不知道如何进行双重合并,因为我已经从current_user.id获取了user_id。

最终目标是让公司能够查看用户以及他们对应用程序的回答。

那么如何添加它以便我可以保存current_user.id和那些答案所属的application_id。我知道必须有一些简单的方法,因为我的路由已经显示了您正在回答的应用程序。但不确定如何将其添加到数据库(控制器)

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现这样的目标:

  1. 在隐藏字段中添加application_id,以便在保存答案时自动可用。
  2. 将创建操作的路由更改为嵌套到应用程序中。即。 application/:application_id/answers/:id
  3. 要实现第一个,您只需要添加一个隐藏字段,如:

    <%= 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