簡體   English   中英

將attr_accessible從Rails 3升級到Rails 4

[英]Upgrading attr_accessible from Rails 3 to Rails 4

我正在嘗試從rails 3升級到rails 4,而我所有的25個模型都基於attr_accessor! 因此,在開始之前,任何人都可以向我提供一個有關如何執行此操作的簡單示例。 我已經閱讀了文檔和其他主題,但是由於這是我的第一次升級Rodeo,因此尚不清楚如何執行此操作。

class Settings < ActiveRecord::Base
  image_accessor :favicon
  attr_accessible :company_name, :show_hot_jobs, :show_students, :subheading, :show_testimonials, :show_on_boarding, :max_concurrent_applications
  attr_accessible :image_uid, :max_concurrent_application_groups
  attr_accessible :primary_color, :white_color, :gray_color, :opacity, :locale, :lang_nl, :lang_fr, :lang_de, :lang_en, :privacy_page
  attr_accessible :show_evp, :show_contact_person, :show_jobs_for_you
  attr_accessible :favicon, :favicon_uid, :remove_favicon, :retained_favicon
  attr_accessible :home_url, :show_correspondence, :show_appointment
  attr_accessible :sliderone_uid, :slidertwo_uid, :sliderthree_uid, :sliderfour_uid, :sliderfive_uid
  attr_accessible :sliderone_link, :slidertwo_link, :sliderthree_link, :sliderfour_link, :sliderfive_link
  attr_accessible :sliderone_testoverview,  :slidertwo_testoverview, :sliderthree_testoverview, :sliderfour_testoverview, :sliderfive_testoverview
  attr_accessible :sliderone_page,  :slidertwo_page, :sliderthree_page, :sliderfour_page, :sliderfive_page

  validate :any_lang_present?
  validates :max_concurrent_applications, :numericality => { :greater_than_equal_to => 1 }
  validates :max_concurrent_application_groups, :numericality => { :greater_than_equal_to => 1 }

  # Fav Icon Validation
  validates_property :ext, of: :favicon, :in => ['ico', 'png', 'gif']

  has_paper_trail

  has_many :setting_translations, :foreign_key => :setting_id
  accepts_nested_attributes_for :setting_translations, :allow_destroy => true, :reject_if => :all_blank
  attr_accessible :setting_translations_attributes, :allow_destroy => true

  translates :subheading, :company_name, :image_uid, :home_url, :sliderone_uid, :slidertwo_uid, :sliderthree_uid, :sliderfour_uid, :sliderfive_uid
  translates :sliderone_link, :slidertwo_link, :sliderthree_link, :sliderfour_link, :sliderfive_link
  translates :sliderone_testoverview,  :slidertwo_testoverview, :sliderthree_testoverview, :sliderfour_testoverview, :sliderfive_testoverview
  translates :sliderone_page,  :slidertwo_page, :sliderthree_page, :sliderfour_page, :sliderfive_page

attr_accessible可以這樣轉換:

class Settings
  attr_accessible :home_url
  accepts_nested_attributes_for :setting_translations
end

class SettingTranslation
  attr_accessible :etc
end

class SettingsController

  def create
    @settings = Settings.new(settings_params)
    # ...
  end

  private

  def settings_params
    params.require(:settings).permit(
      :home_url,
      :setting_translations_attributes => [:id, :_destroy, :etc]
    )
  end
end

注意,如果要允許對該模型進行銷毀,則必須包括:_destroy:allow_destroy => true ),並且必須包括所有可從任何嵌套屬性訪問的屬性。 盡管在允許時刪除了attr_accessible ,但是也沒有刪除accepts_nested_attributes_for

只需從模型中刪除attr_accessible。 並根據需要在控制器中添加許可參數。 像下面這樣:

class SupportTicketsController < ApplicationController

  def create
    @support_ticket = SupportTicket.create(house_params)
    ......
  end

  private

  def house_params
    params.require(:support_ticket).permit(:subject, :message, ....)
  end

end

如果您不想進行太多更改, 在您的gemfile中添加“ protected_attributes” gem https://github.com/rails/protected_attributes ,一切都會像以前一樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM