我正在尝试使用此配方here为我的Rails应用表单创建模板,即自定义文件 lib / templates / erb / scaffold / _form.html.erb
我想要的是使用type =“text”的所有输入具有相同的class =“form-control”,因为我使用的是Bootstrap 3。
现在,所有这些输入都是由模板中的这一行生成的:
<%%= f.<%= attribute.field_type %> :<%= attribute.column_name %> %>
我的问题是:
有人可以帮我解决一下该做些什么吗?或者至少向我解释现在生成这些输入的行的语法,所以我可以继续自己吗?
提前致谢!
答案 0 :(得分:2)
解释这里发生的事情:
<%%= f.<%= attribute.field_type %> :<%= attribute.column_name %> %>
生成的属性的第一个方法field_type
基本上是获取rails需要为该字段生成的字段类型。查看method implementation,您会发现它的作用:
# File railties/lib/rails/generators/generated_attribute.rb, line 66
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
else
:text_field
end
end
第二种方法'column_name'也是如此,通过查看source非常自我解释:
# File railties/lib/rails/generators/generated_attribute.rb, line 116
def column_name
@column_name ||= reference? ? "#{name}_id" : name
end
如果你想知道<%%
代表什么:它正在逃避ERB代码,因此它将在最终生成的模板中产生一个<%
。
现在,为了实现你想要的,做到这样:
<%%= f.<%= attribute.field_type %> :<%= attribute.column_name %>, class: '<%= attribute.field_type %> form-control' %>