2012-09-14 47 views
0

的Rails 3.0
按照下列指示更新列: https://github.com/plataformatec/devise/wiki/How-To%3a-Require-admin-to-activate-account-before-sign_in 我已經生成一個遷移:批准(布爾)對我的色器件user.rb.現在我想用另一個控制器的複選框進行編輯:unapproved_users_controller.rb。
當我在編輯中加載表單時出現此錯誤:未定義的方法`user_path'。Rails的設計 - 從另一個控制器

的routes.rb,爲我的新控制器

resources :unapproved_users 

應用程序的資源/模型/ user.rb,請注意:批准是attr_accessible。

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :approved 

    def active_for_authentication? 
    super && approved? 
    end 

    def inactive_message 
    if !approved? 
     :not_approved 
    else 
     super # Use whatever other message 
    end 
    end 

    def self.send_reset_password_instructions(attributes={}) 
    recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found) 
    if !recoverable.approved? 
     recoverable.errors[:base] << I18n.t("devise.failure.not_approved") 
    elsif recoverable.persisted? 
     recoverable.send_reset_password_instructions 
    end 
    recoverable 
    end 
end 

應用程序/控制器/ unapproved_controllers.rb

class UnapprovedUsersController < ApplicationController 

    def index 
    if params[:approved] == "false" 
     @users = User.find_all_by_approved(false) 
    else 
     @users = User.all 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

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

end 

應用/視圖/ unapproved_users/index.html.haml

%h1 Users 

= link_to "All Users", :action => "index" 
| 
= link_to "Users awaiting approval", :action => "index", :approved => "false" 

%table 
    - @users.each do |user| 
     %tr 
      %td= user.email 
      %td= user.approved 
      %td= link_to "Edit", edit_unapproved_user_path(user) 

應用/視圖/ unapproved_users /編輯.html.haml

= render 'form' 

應用程序/視圖/ unapproved_users/_form.html.haml

= form_for (@user) do |f| 

    -if @user.errors.any? 
    #error_explanation 
     %h2= "#{pluralize(@user.errors.count, "error")} prohibited this user from being saved:" 
     %ul 
     - @user.errors.full_messages.each do |msg| 
      %li= msg 

    .field 
    = f.label :approved, 'Approved?' 
    = f.check_box :approved 
    .actions 
    = f.submit 'Save' 

回答

1

您需要更改的form_for。

應該

= form_for(@user, :url => unapproved_user_path(@user)) do |f|