2017-01-29 18 views
0

ユーザーがwww.example.com/personal_messages/newにアクセスしたときに、新しいアカウントではなく、ユーザーがそれを送信したとき。しかし、問題は、User.create関数を動かすとエラーが出るということです。これには回避策がありますか?RoR - ユーザーが新しいページに移動したときではなく、作成時にユーザーを作成する

personal_messagesあなたnewアクションでコントローラ

class PersonalMessagesController < ApplicationController 
    before_action :check_receiver!, only: [:new, :create] 

    def new 
    redirect_to conversation_path(@conversation) and return if @conversation 
    @personal_message = current_user.personal_messages.build 
    end 

    def create 
    @conversation ||= Conversation.create(author_id: cookies[:user_id], 
             receiver_id: @receiver) 
    @personal_message = current_user.personal_messages.build(personal_message_params) 
    @personal_message.conversation_id = @conversation.id 
    @personal_message.save! 

    flash[:success] = "ok!" 
    redirect_to conversation_path(@conversation) 
    end 

    private 

    def personal_message_params 
    params.require(:personal_message).permit(:body) 
    end 

    def check_receiver! 
    @ip = request.remote_ip 
    if cookies[:user_id].blank? 
    @user = User.create(email: "thinkrtcvisitor-#{rand(999999)}@visitor.com", ip_address: @ip, password: '12345678', password_confirmation: '12345678') 
     @user.save! 
     cookies.permanent[:user_id] = @user.id 
     cookies.permanent[:current_user_cookie] = User.find_by_id(cookies[:user_id]) 
     session[:user_id] = @user.id 
    end 
    @receiver = cookies[:site_id] 
    @conversation = Conversation.between(cookies[:user_id], @receiver)[0] 
    end 
end 

答えて

0

使用

@personal_message = current_user.personal_messages.new 

代わりの

@personal_message = current_user.personal_messages.build 

+0

これは多少動作しているようですが、彼らは/ personal_messages /新 EDITに行くとき今、ユーザーがリダイレクトされていません。また、私は@personal_message = PersonalMmessage.newを試してみましたが、この作品。 – Raidspec

+1

'build'と' new'はちょうど別名です、http://apidock.com/rails/ActiveRecord/Relation/build – Iceman

関連する問題