2012-12-25 6 views
6

जब मैं उपयोगकर्ता को व्यवस्थापक के रूप में संपादित करने का प्रयास कर रहा हूं तो मैं सत्यापन को छोड़ना चाहता हूं।update_attributes के दौरान व्यवस्थापक के रूप में सत्यापन को कैसे छोड़ें?

मॉडल

class User 
    ... 
    attr_accessible :company_id, :first_name, :disabled, as: :admin 

नियंत्रक

class Admin::UsersController 
    ... 
    def update 
    @user = User.find(params[:id]) 
    @user.update_attributes(params[:user], as: :admin) 
    redirect_to edit_admin_user_path(@user), :notice => "User Account Updated" 
    end 

तो मैं

def update 
    @user = User.find(params[:id]) 
    @user.attributes = params[:user] 
    @user.save(validate: false) 
    redirect_to edit_admin_user_path(@user), :notice => "User Account Updated" 
end 

को update कार्रवाई बदलने की कोशिश की लेकिन तब मैं न 0 सेट करने के लिए उपयोग कर सकते हैऔर :company_id गुण क्योंकि मुझे नहीं पता है, जहां स्थापित करने के लिए as: :admin

उत्तर

12

इस प्रयास करें:

@user = User.find(params[:id]) 
@user.assign_attributes(params[:user], as: :admin) 
@user.save(validate: false) 
0

हैक विधि:

def update 
    @user = User.find(params[:id]) 
    @user.define_singleton_method :run_validations! do true; end 
    @user.update_attributes(params[:user], :as => :admin) 
    redirect_to edit_admin_user_path(@user), :notice => "User Account Updated" 
end 
5

मजबूत पैरामीटर

इस के लिए पटरियों के साथ एक मुद्दा रहा है एक लंबे समय में, रेल 4 में वे "मजबूत पैरामीटर" पेश कर रहे हैं

आप रेल में मजबूत मापदंडों मणि उपयोग कर सकते हैं 3 अनुप्रयोगों के रूप में अच्छी तरह से

वैकल्पिक: संदर्भ गुण

यह करने के लिए एक और तरीका है, एक संदर्भ चर परिचय उपयोगकर्ता मॉडल पर - * नोट मैं attr_accessible *

के लिए 'as' विकल्प से परिचित नहीं हूं
class User < ActiveRecord::Base 

    attr_accessor :is_admin_applying_update 

    validate :company_id, :presence => :true, :unless => is_admin_applying_update 
    validate :disabled, :presence => :true, :unless => is_admin_applying_update 
    validate :first_name, :presence => :true, :unless => is_admin_applying_update 
    # etc... 

अपने व्यवस्थापक नियंत्रक में सच

class Admin::UsersController 
    # ... 
    def update 
    @user = User.find(params[:id]) 
    @user.is_admin_applying_update = true 
    @user.update_attributes(params[:user]) 

नोट करने के लिए is_admin_applying_update विशेषता निर्धारित: आप भी समूह सत्यापन और उपयोग कर सकते हैं एक भी सशर्त

+0

मैं रेल के लिए नया। क्या यह सुरक्षित है? क्या यह विधि मजबूत मानकों के बिंदु को पराजित नहीं करती है? या मुख्य रूप से बड़े पैमाने पर असाइनमेंट भेद्यता के लिए मजबूत पैरामीटर हैं? –

+0

मजबूत पैरामीटर बड़े पैमाने पर असाइनमेंट भेद्यता के लिए हैं, आप इसके साथ संयोजन में संदर्भ सत्यापन का उपयोग कर सकते हैं, मैंने कभी भी इसे रोलिंग जांच के लिए उपयोग नहीं किया है, आमतौर पर जब मॉडल को कई रूपों में अपडेट किया जाता है और सत्यापन के बीच उनके बीच भिन्नता की आवश्यकता होती है – house9

संबंधित मुद्दे