Devise rails无法使用CRUD进行更新

时间:2013-10-11 15:20:32

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

我正在使用设计,我正在尝试创建一个CRUD界面。所以我做了,但我似乎无法更新甚至访问表单。

这是我的路线。

devise_for :users, :controllers => { :registrations => "registrations" }
resources :myusers

此处myuser控制器编辑,更新

  # POST /myusers
  # POST /myusers.json
  def create
    @myuser = User.new(params[:myuser])

    respond_to do |format|
      if @myuser.save
        format.html { redirect_to @myuser, notice: 'User was successfully created.' }
        format.json { render json: @myuser, status: :created, location: @myuser }
      else
        format.html { render action: "new" }
        format.json { render json: @myuser.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /myusers/1
  # PUT /myusers/1.json
  def update
    @myuser = User.find(params[:id])

    respond_to do |format|
      if @myuser.update_attributes(params[:myuser])
        format.html { redirect_to root_url, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @myuser.errors, status: :unprocessable_entity }
      end
    end
  end

这里我的编辑表单试用1

<%= form_for @myuser, url: myuser_path(@myuser), html: { method: :put} do |f| %>
...
<% end %>

尝试2就是这个

<%= form_for(@myuser) do |f| %>
...
<% end %>

对于一个似乎有效,但它实际上不修改数据,它确实显示消息它被修改。

更新

这是我的注册控制器:

class RegistrationsController < Devise::RegistrationsController
  def update
    # required for settings form to submit when password is left blank
    if params[:user][:password].blank?
      params[:user].delete("password")
      params[:user].delete("password_confirmation")
    end

    @user = User.find(current_user.id)
    if @user.update_attributes(params[:user])
      set_flash_message :notice, :updated
      # Sign in the user bypassing validation in case his password changed
      sign_in @user, :bypass => true
      redirect_to after_update_path_for(@user)
    else
      render "edit"
    end
  end
end

我也有注册助手

module RegistrationsHelper
  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end
end

这是我的参数

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"Fx7uCaiLyyT3wwnL9GrZ8671oJVeuYxodN+vXqpbqIE=",
 "user"=>{"username"=>"jf_dufour",
 "first"=>"Jean-Sebastien",
 "last"=>"Dufour",
 "phone"=>"...",
 "email"=>"jf_dufour@....ca",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]",
 "admin"=>"Technician"},
 "commit"=>"Update User",
 "id"=>"1"}

2 个答案:

答案 0 :(得分:0)

我要在这里采取刺,并说resources :myusers导致你的问题。

由于您的单数模型名为User,因此您需要 - resources :users

唯一的问题是,如果您需要/users/,我会将您的路径路由到/myusers/我认为您必须使用单一路线。我不相信resources允许你要指定一个不同的网址。

答案 1 :(得分:0)

您的创建操作看起来没问题,只需确保您在表单中包含:password:password_confirmation字段。

您的更新操作应如下所示:

# app/controllers/my_users_controller.rb

def update
  user = User.find(params[:id])

  if params[:myuser][:password].blank?
    params[:myuser].delete(:password)
    params[:myuser].delete(:password_confirmation)
  end

  if user.update_attributes(params[:myuser])
    redirect_to my_users_path, notice: "User has been updated."
  else
    render action: 'edit'
  end
end