我尝试扩展 railties-4.2.6 / lib / rails / generated_attribute.rb 以创建两种新类型。我需要这个,因为在运行时
rails g scaffold Contact address:hidden title:select gender:select first_name:string surname:string email:string phones:string
我需要Rails了解它不能为属性地址创建字段,并且必须为标题和 HTML select 标记>性别
我写了以下代码:
require 'rails/generators/generated_attribute'
module Rails
module Generators
class GeneratedAttribute
class << self
def hidden?
@field_type == :nofield
end
def select?
@field_type == :select
end
end
def field_type
@field_type ||= case type
when :integer then :number_field
when :float, :decimal then :text_field
when :time then :time_select
when :datetime, :timestamp then :datetime_select
when :date then :date_select
when :text then :text_area
when :boolean then :check_box
when :hidden then :nofield
when :select then :select
else
:text_field
end
end
end
end
end
并将其放在 lib / generators / my_attributes_generator / my_attributes_generator.rb 下,但当我在上面运行 rails g scaffold 命令时,我仍然得到了
(erb):25:in `block in template': undefined method `hidden?' for #<Rails::Generators::GeneratedAttribute:0xcdcf83c> (NoMethodError)
我的脚手架模板上写着
<%- if attribute.hidden? -%>
我尝试了很多方法,但没有任何帮助。现在,我甚至质疑自己是否有可能做到这一点。
答案 0 :(得分:1)
您应该从单例类中取出hidden?
方法,并将其定义为类GeneratedAttribute
中的常规方法。因为在hidden?
中定义class << self; end
方法只能通过GeneratedAttribute.hidden?
require 'rails/generators/generated_attribute'
module Rails
module Generators
class GeneratedAttribute
def hidden?
@field_type == :nofield
end
end
end
end
然后此代码<%- if attribute.hidden? -%>
将起作用。
让我知道它是否有帮助!