2013-10-11 2 views
2

Я использую devise, и я пытаюсь создать интерфейс CRUD. Так что я сделал, однако я не могу обновить или даже получить доступ к форме.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 %> 

Для одного это похоже на работу но он фактически не изменяет данные, это показывает сообщение, что оно было изменено.

Update

Вот моя регистрация контроллер:

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"=>"[email protected]", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]", 
"admin"=>"Technician"}, 
"commit"=>"Update User", 
"id"=>"1"} 
+0

ли вы следить за процессом здесь: https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through -a-CRUD-интерфейс? Если вы не управляете параметрами password & password_confirmation надлежащим образом, процесс завершится неудачно. –

+0

Как я могу создать usercontroller? Потому что это было бы единственное, чего я не делал. У меня есть регистрация изменений, как следует – Jseb

+0

В вашем случае вы поместите его в MyUsersController (для которого вы уже разместили свои действия по созданию и обновлению) –

ответ

0

Я собираюсь взять нажмите здесь и скажите, что resources :myusers вызывает вашу проблему.

Поскольку ваша особая модель называется User, вы хотите - resources :users.

Только вопрос, это будет маршрут ваши пути к /users/ если вы хотите /myusers/ Я думаю, что вы должны будете использовать особые маршруты .. Я не верю, что resources позволяет указать другой URL.

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 
+0

Я просто пытаюсь, однако я получаю эту ошибку сейчас: undefined method '[] 'for nil : NilClass – Jseb

+0

У меня были следующие параметры: пользователь вместо: myuser ... Просмотреть последнее обновление, помогает ли это? –

+0

Нет, причина, по которой я их проверял как myuser, устройство может быть больно – Jseb

Смежные вопросы