我希望有一个任何人都可以填写的表格,但必须登录才能提交 - 如果没有,请将流程暂停,直到他们这样做。
我的思维过程是,如果有人遇到表单,它会检查他们是否已登录,如果不是用户仍然可以填写,而是提示登录或注册而不是“提交”。如果他们点击任一链接(登录/注册)我希望它保存表单数据,最有可能是会话,让他们登录/注册,然后让计算机检查是否有保存的表单,如果是,则显示屏幕等确认,新注册的用户可以接受。
我发布了下面的代码,我认为它会起作用,但事实并非如此 - 而且我认为知道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"}
我尝试过每一个方法调整它,但它仍然让我在这里,所以我无法测试我的代码是否正常工作
答案 0 :(得分:0)
你的CommentsController是什么#create和#show动作?关于您的错误,您是否可以粘贴save_to_session_and_log_in_path
和save_to_session_and_sign_up_path
方法的佣金路线结果?由于您当时没有id
,因此应将其设置为collection
路线。
-
我这样做的方式是将表单提交给处理每个场景的不同控制器。这样,您的CommentsController
将用于登录用户,您可以使用TemporaryCommentsController
来处理访客发表的评论。
-
另外,根据评论的字段,我不知道将它们存储在会话中是否是一个好主意。您可以在会话中存储tmp_comment_id并从数据库中恢复。此外,删除所有带有cron-job的记录。 (这只是在“评论很大而且难以序列化”时才会出现问题。)