无法在自定义操作中更新用户模型中的属性

时间:2014-11-22 20:11:58

标签: ruby-on-rails ruby devise

我在我的应用程序中为用户使用Gem Devise。我在用户中添加了设置为nil的role属性。登录后,在应用程序控制器中,我有一个重定向,转到用户控制器中的自定义操作,如果current_user.role = nil,则视图称为binary_selection。代码在

之下

application_controller.rb:

def after_sign_in_path_for(resource)
   if current_user.role.nil?  ## temporary solution
     #update_path(resource)
     binary_selection_path(resource)
   else
     root_path(resource)
   end
 end

users_controller.rb:

def binary_selection
  @user = current_user

  respond_to do |format|
    if @user.update_attributes(params[:user][:role])
      format.html { redirect_to root_url, notice: "#{@user.name} was updated." }
    else
      format.html { render action: "edit" }
    end
  end
end

视图/用户/ binary_selection.html.erb:

    <%= form_for @user, url: binary_selection_path(@user), html: { method: :patch } do |f|
 %><%= current_user %>
    <div class = "form-group">
      <%= f.label :role %>
      <%= f.text_field :role, class: 'form-control', placeholder: "Enter wiki title", id: 'wiki_title' %>
    </div>
    <div class = "form-group">
      <%= f.submit class: 'btn btn-success' ,id: 'wiki_submit'  %>
    </div>
  <% end %>

配置/ routes.rb中:

Rails.application.routes.draw do

  devise_for :users
  get "/users" => "users#binary_selection", as: 'binary_selection'
  resources :users

end

当我被重定向到binary_selection视图时,我收到此错误:

NoMethodError in UsersController#binary_selection
undefined method `[]' for nil:NilClass

在用户控制器中突出显示此行:         if @ user.update_attributes(params [:user] [:role])

我也注意到错误页面上的params有这个:

 {"format"=>"13"}

2 个答案:

答案 0 :(得分:0)

  • 您的表单未正确提交值。所以在binery select动作中检查你的参数。
  • record#update_attributes不接受单个值,它接受散列。所以正确的代码应该是这样的:

    rails版本&lt; 4

    if @ user.update_attributes(params [:user])

    轨道4中的

    。*

    if @ user.update_attributes(user_params)

控制器中的

确保您已允许用户参数。

答案 1 :(得分:0)

您在sign_in之后将用户重定向到binaray_selection_path。这将导致HTTP GET请求。在users_controller中,您尝试从params获取一个简单不存在的属性。没有params[:user],因为表单尚未发送。

如果表单已呈现,您需要将用户重定向到页面。

我建议您阅读本指南:http://guides.rubyonrails.org/getting_started.html#getting-up-and-running