Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 推迟创建操作_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 推迟创建操作

Ruby on rails 推迟创建操作,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想有一个任何人都可以填写的表格,但必须登录才能提交——如果没有,就暂停这个过程,直到他们填写为止 我的想法是,如果有人看到表单,它会检查他们是否登录,如果没有,用户仍然可以填写表单,但会提示用户登录或注册,而不是“提交”。如果他们点击任何一个链接(登录/注册),我希望它保存表单数据,最有可能是会话,让他们登录/注册,然后让计算机检查是否有保存的表单,如果有,则显示一个类似确认的屏幕,新注册的用户可以接受它 我在下面发布了我认为可以使用的come代码,但事实并非如此——我想,了解rails之后,

我想有一个任何人都可以填写的表格,但必须登录才能提交——如果没有,就暂停这个过程,直到他们填写为止

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

我在下面发布了我认为可以使用的come代码,但事实并非如此——我想,了解rails之后,可能会有一些惯例可以更快、更容易地实现这一点

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

看法

用户*控制器

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"}

我尝试了各种方法对其进行调整,但它仍然让我无法测试我的任何代码是否正常工作

您的CommentsController#创建和#显示操作是什么?关于您的错误,您是否可以粘贴路径中的
保存到会话和日志以及
保存到会话和注册路径的rake路由结果?因为您当时没有
id
,所以应该将它们设置为
收集
路由

--

不过,我的做法是将表单提交给处理每个场景的不同控制器。这样,您的
CommentsController
将用于登录用户,您可以拥有一个
TemporaryCommentsController
,它将处理来宾的评论

--


另外,根据评论的字段,我不知道在会话中存储它们是否是一个好主意。您可能会在会话中存储一个tmp_comment_id,并从数据库中恢复该id。另外,使用cron作业删除所有记录。(只有在“注释很大且很难序列化”的情况下,这才是一个问题)。

这不是仅仅是
会话[:temp_comment]=params[:comment]
?该评论是否正确显示在URL参数中?@mind.blank我更新了帖子,我无法判断我们的解决方案是否有效,因为我无法克服上面的错误,似乎您无法在会话中保存ActiveRecord模型。相反,即使我替换了comment,您也可以保存params[:comment]@laise。使用params[:comment]新建(params[:comment]),我也会收到相同的错误
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"}