2016-05-27 2 views
1

Я пытаюсь сделать так, чтобы при сохранении ответа я также сохранил prop_id, связанный с этим ответом.RoR: Сохранять информацию от 3 моделей одновременно

У меня есть отношение вложенных маршрутов, так что каждая подсказка (означает предложение или ставка) имеет связанный ответ вроде этого: http://localhost:3000/props/1/answers/new.

Прямо сейчас, когда я сохраняю ответ, я сохраняю выбор ответа и user_id, который создал ответ. Мне нужно сохранить также опору, связанную с ответом.

Ответы Контроллер:

class AnswersController < ApplicationController 
    attr_accessor :user, :answer 

    def index 

    end 

    def new 
    @prop = Prop.find(params[:prop_id]) 

    @user = User.find(session[:user_id]) 

    @answer = Answer.new 

    end 

    def create 
    @prop = Prop.find(params[:prop_id]) 
    @user = User.find(session[:user_id]) 
    @answer = @user.answers.create(answer_params) 

    if @answer.save 

    redirect_to root_path 

    else 
    render 'new' 
    end 


    end 


    def show 
    @answer = Answer.find params[:id] 

    end 
end 

private 
def answer_params 
    params.require(:answer).permit(:choice, :id, :prop_id) 
end 

Ответ Модель

class Answer < ActiveRecord::Base 
    belongs_to :prop 
    belongs_to :created_by, :class_name => "User", :foreign_key => "created_by" 
    has_many :users 

end 

Prop Модель

class Prop < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments 
    has_many :answers 
end 

пользователя Модель

class User < ActiveRecord::Base 
    has_many :props 
    has_many :answers 
    has_many :created_answers, :class_name => "Answer", :foreign_key => "created_by" 
    before_save { self.email = email.downcase } 
    validates :username, presence: true, uniqueness: {case_sensitive: false}, length: {minimum: 3, maximum: 25} 
    has_secure_password 
end 

ответ

0

Немного измените свой код, и он будет работать:

def create 
    @user  = User.find(session[:user_id]) 
    @prop  = @user.props.find_by(id: params[:prop_id]) 
    @answer  = @user.answers.build(answer_params) 
    @answer.prop = @prop 

    # Modify @user, @prop or @answer here 

    # This will save @user, @prop & @answer 
    if @user.save 
    redirect_to root_path 
    else 
    render 'new' 
    end 
end 
Смежные вопросы