【问题标题】:<%= current_user.role %> evaluates to nothing in Rails 4<%= current_user.role %> 在 Rails 4 中计算结果为空
【发布时间】:2015-06-05 18:53:00
【问题描述】:

我正在制作一个 Rails 应用程序并试图让用户的角色显示在视图上。我为此使用的代码是:

<%= current_user.role %>

它不会评估任何东西。

我正在使用设计进行用户注册,我的注册视图如下:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>

    <div class="login-field">
      <%= f.email_field :email, :placeholder => "Email"  %>
    </div>

    <div class="login-field">
      <%= f.password_field :password, autocomplete: "off", :placeholder => "Password (8 character min)"  %>
    </div>

    <div class="login-field">
        <%= f.text_field :firstname, :placeholder => "First Name"  %>
    </div>

    <div class="login-field">
        <%= f.text_field :lastname, :placeholder => "Last Name"  %>
    </div>

    <div class="login-field">
        <%= f.text_field :phone, :placeholder => "Phone Number"  %>
    </div>

    <%= f.select(:role, ['Role 1', 'Role 2', 'Both']) %>

    <br>

    <div><%= f.submit "Signup" , :class => "btn btn-success btn-lg" %></div>

  <% end %>

  <%= render "devise/shared/links" %> 

我有一种感觉,我在提交表单时做错了,但无法弄清楚它是什么。任何帮助表示赞赏

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 devise views


    【解决方案1】:

    你可以把它放在createaction的顶部:

    return render text: params.inspect # get what the form sended
    

    和或

    return render text: create_params # get what the values you permitted
    

    这样您将获得您发送的数据以及是否符合您的预期。

    【讨论】:

      【解决方案2】:

      您应该覆盖设计注册中的sign_up_params。创建继承自 Devise::RegistrationsControllerRegistrationsController 后,您可以覆盖 sign_up_params

      class RegistrationsController < Devise::RegistrationsController
      
        private
      
        def sign_up_params
          params.require(:user).permit(:first_name, :last_name, :email, :phone, :role ... any other attributes)
        end
      
      end
      

      您还需要更改 routes.rb 以指向新创建的控制器:

      devise_for :users, controllers: {registrations: 'registrations'}

      【讨论】:

      • 我按照你说的做了,但它仍然没有产生任何东西。
      • 是否设置了phone属性?
      • 它似乎唯一的设置电子邮件和密码
      • 尝试调试看看它是否在使用新的控制器。确保您修改了 routes.rb 中的 devise_for
      • 我更改了 routes.rb 中的 devise_for。抱歉,我是个 Rails 菜鸟,如何调试以检查我是否使用新控制器?
      猜你喜欢
      • 2016-09-15
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2020-12-29
      相关资源
      最近更新 更多