2

誰でも入力できるフォームを作成したいのですが、送信するにはログインする必要があります。そうでない場合は、入力するまでプロセスを保留にします。

私の思考プロセスは、誰かがフォームに出くわした場合、ログインしているかどうかを確認し、そうでない場合でもユーザーは入力できますが、代わりに「送信」ではなくログインまたはサインアップするように求められます. ユーザーがいずれかのリンク (ログイン/サインアップ) をクリックした場合は、フォーム データを保存する必要があります (ほとんどの場合、セッションに保存し、ログイン/サインアップしてから、保存されたフォームがあるかどうかをコンピューターに確認させます)。 、そうであれば、新しく登録されたユーザーがそれを受け入れることができる画面のような確認を表示します。

うまくいくと思ったコードを以下に投稿しましたが、そうではありません-そして、レールを知っているので、おそらくこれをより速く簡単に行うための何らかの慣習があると思いました!

そして、フォームデータを渡す方法が正しいとは思わないので、誰かが私を修正できれば、それは素晴らしいことです!

意見

<%= form_for :comment, :url => {:action => 'create'} %>
    form fields here
<% if current_user %>
    <%= f.submit "Submit" %>
<% else %>
    <%= link_to "Log In", save_to_session_and_log_in_path(:comment => :comment) %> or 
    <%= link_to "Sign Up", save_to_session_and_sign_up_path(:comment => :comment) %>
<% end %>

コントローラ

def save_to_session_and_log_in_path
  session[:temp_comment] = Comment.new(params[:comment])
  redirect_to log_in_path
end

def save_to_session_and_sign_up_path
  session[:temp_comment] = Comment.new(params[:comment])
  redirect_to sign_up_path
end

ユーザー* コントローラー

def create 
  #Normal create action, under the redirect:
  if session[:temp_comment]
    redirect_to confirm_comment
  else
    redirect_to users_home_page
  end
end

私が受け取っているエラーは次のとおりです。

ActiveRecord::RecordNotFound in CommentsController#show

Couldn't find Comment with id=save_to_session_and_log_in
Rails.root: scrubbed

Application Trace | Framework Trace | Full Trace
app/controllers/comments_controller.rb:87:in `show'
Request

Parameters:

{"comment"=>"comment"
"id"=>"save_to_session_and_log_in"}

私はそれをあらゆる方法で微調整しようとしましたが、それでもここに到達し続けるため、コードが機能しているかどうかをテストできません

4

1 に答える 1

0

あなたの CommentsController#create と #show アクションは何ですか? あなたのエラーについて、save_to_session_and_log_in_pathsave_to_session_and_sign_up_pathメソッドのレーキ ルートの結果を貼り付けていただけますか? idその時点ではがないため、それらをcollectionルートとして設定する必要があります。

--

ただし、私が行う方法は、各シナリオを処理するさまざまなコントローラーにフォームを送信することです。そうすれば、あなたのCommentsController意志はログインしたユーザー向けでありTemporaryCommentsController、ゲストによるコメントを処理する を持つことができます.

--

また、コメントのフィールドによっては、セッションに保存するのが良いアイデアかどうかもわかりません。おそらくセッションに tmp_comment_id を保存し、それを DB から復元できます。また、cron ジョブですべてのレコードを削除します。(これは、「コメントが大きく、シリアライズするのが「難しい」」場合にのみ問題になります)。

于 2013-02-21T05:17:21.937 に答える