2

我想要一个任何人都可以填写的表格,但必须登录才能提交 - 如果没有,请暂停该过程,直到他们这样做。

我的思考过程是,如果有人遇到表格,它会检查他们是否已登录,如果没有,用户仍然可以填写,而是提示登录或注册,而不是“提交”。如果他们单击任一链接(登录/注册),我希望它保存表单数据,最有可能是会话,让他们登录/注册,然后让计算机检查是否有保存的表单,如果是这样,则显示一个确认屏幕,新注册的用户可以接受它。

我已经在下面发布了我认为可以工作的代码,但事实并非如此 - 我在想知道 rails,可能有一些约定可以更快更容易地做到这一点!

而且我不相信我传递表单数据的方式是正确的,所以如果有人可以在那里纠正我,那就太好了!

看法

<%= 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 操作是什么?关于您的错误,您能否粘贴 rake 路由结果save_to_session_and_log_in_pathsave_to_session_and_sign_up_path方法?由于您id当时没有,您应该将它们设置为collection路线。

--

不过,我这样做的方式是将表单提交给将处理每种情况的不同控制器。这样,您CommentsController将用于登录用户,并且您可以拥有一个TemporaryCommentsController可以处理客人发表的评论。

--

此外,根据评论的字段,我不知道将它们存储在会话中是否是个好主意。您可能可以在会话中存储一个 tmp_comment_id 并从数据库中恢复它。此外,使用 cron-job 删除所有记录。(这只有在“评论很大且‘难以’序列化”时才会出现问题)。

于 2013-02-21T05:17:21.937 回答