设计访客用户 - 更新属性

时间:2013-12-16 21:10:30

标签: ruby-on-rails devise rails-geocoder

我在我的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作为来宾用户指定的参数?

如果我能在这里澄清任何内容,请告诉我,并提前致谢!

1 个答案:

答案 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