我在我的Rails 3应用程序中使用了Devise,并且我按照概述here实现了一些来宾用户功能。
我在这里遇到的问题是我的应用程序依赖于一些准确的地理编码(使用rails地理编码器和zip用户地理编码),因此我不想使用IP地址。我的解决方案是为访客用户提供登录页面,他们输入他们的邮政编码,并使用该zip和地理编码的lat和long创建访客用户记录。请记住,尚未创建这些来宾用户记录,在导航离开着陆页之前不确定为什么不创建这些用户记录。我试图简单地使用一个名为create_guest_user
方法的表单提交,其中:zip
作为参数,但这是一个私有方法,所以我不能这样做。
<p>
To get started, either <%= link_to 'Sign Up', new_user_registration_path %>,
<%= link_to 'Sign In', new_user_session_path %> or enter your zip code here if you want to look around first:
<br><br>
<%= form_tag({controller: "application", action: "create_guest_user", method: "post"}) do %>
<%= text_field_tag :zip %>
<%= submit_tag 'Enter Zip', class: "btn" %>
<% end %>
</p>
从我的阅读中我认为最好将此方法保留为私有方式,因此我正在努力弄清楚如何使其工作。
有关使用上述链接中概述的Devise方法创建此来宾用户的最佳方法的任何想法,但包括:zip作为来宾用户指定的参数?
如果我能在这里澄清任何内容,请告诉我,并提前致谢!
答案 0 :(得分:0)
在您的链接中,查看方法current_or_guest_user
,只需调用guest_user
即可调用create_guest_user
。
如果你想离开create_guest_user
,那么只需创建一个用于处理表单的帖子控制器操作,它就可以调用create_guest_user
,因为你的控制器方法应该扩展ApplicationController
,这是create_guest_user
方法被声明为私有。
class ApplicationController < ActionController::Base
def public_method
# you can call private methods from inside the same class so this is valid
private_method
end
private
def private_method
end
end
class LocationController < ApplicationController
def location_public_method
# you can call private methods from ApplicationController since LocationController extends ApplicationController so this is valid
private_method
end
end