0

サインイン後に送信する必要のあるフォームがありますが、すべての閲覧者がフォームを表示して記入することができます。したがって、セッション変数にパラメータを保存します。サインイン後、パラメータを正常に保存します。問題は、user_id(外部キー)を追加して他のパラメータの横に保存することです(ログインする前に、user_idが不明です)。私のコントローラのコードの パート:Rails:Deviseのサインイン後にストア(マージ)パラメータ

def create 
    if current_user.nil? 
     session[:trip] = params 
     redirect_to new_user_registration_path 
    else 
     @trip = Trip.new(trip_params) 
     respond_to do |format| 
      if @trip.save 
... 
private 

def set_trip 
    @trip = Trip.find(params[:id]) 
end 


def trip_params 
    params.require(:trip).permit(:from, :to, :departure_date, :arrival_date, :user_id) 
end 

私が述べたように、このコードが正常に新しいフォームパラメータを格納します。 (挿入またはマージ)current_user.idを追加するには、私はseparetelyこれらのさまざまな方法を試してみました:

@trip = Trip.new(trip_params.merge(user_id: => current_user.id)

@trip = Trip.new(trip_params) 
@trip.user_id = current_user.id 

@trip = current_user.Trip.new(trip_params)

@trip = current_user.trips.new(trip_params)

を、私はこれらの方法のすべてをテストしたが、まだきましたuser_idは保存されていません!! Rails4の問題とその解決方法を理解してください。

+0

生成されたパラメータを投稿できますか? – Pavan

+0

@パヴァンどのパラメータを意味していますか?質問を編集してパラメータを追加しましたが、パラメータのリストには関係しないと思います。 –

+0

'trip_params'から' user_id'を削除し、チェックしてみてください。 – Pavan

答えて

1

うまくいくはずです。

def create 
     if user_signed_in? 
      @trip = current_user.trips.new(trip_params) 
      respond_to do |format| 
       if @trip.save 
       format.html { redirect_to @trip, notice: 'Trip was successfully created.' } 
       format.json { render :show, status: :created, location: @trip } 
       else 
       format.html { render :new } 
       format.json { render json: @trip.errors, status: :unprocessable_entity } 
       end 
      end 
     else 
      session[:trip] = params 
      redirect_to new_user_session_path 
     end 
    end 
+0

ありがとうございました。あなたがコンソールで試してみると、それは正しいと思われます。しかし、私はuser_idを保存しなかったので、この答えにはまだ問題がありました。ですから、私は以下で説明する別のソリューションを使用しました。もう一度、幸運をありがとう。 –

0

問題を解決するために、私はapplication_controller.rbに、この新しいメソッドを追加しました:

def after_sign_in_path_for(resource) 

# save list if there is a temp_list in the session 
if session[:trip].present? 

    @trip = current_user.trips.new(session[:trip]["trip"]) 
    @trip.save 
     session[:trip] = nil 
    return @trip 
else 
    #if there is not temp list in the session proceed as normal 
    super 
end 

end 

私はそれが他の人のために有用であることがしたいです。

関連する問題