Ruby on rails 3 如何在Rails中用div包装每个日期选择?
我正在使用RubyonRails3为用户创建一个表单,用户可以在其中保存自己的生日。控制器和模型周围的所有操作都可以正常工作。但是我在这个表单的样式上遇到了问题 对于表单中的每一个select,我都在其周围加上一个div,以对其进行样式化,这通常很好。Ruby on rails 3 如何在Rails中用div包装每个日期选择?,ruby-on-rails-3,forms,html,wrapper,Ruby On Rails 3,Forms,Html,Wrapper,我正在使用RubyonRails3为用户创建一个表单,用户可以在其中保存自己的生日。控制器和模型周围的所有操作都可以正常工作。但是我在这个表单的样式上遇到了问题 对于表单中的每一个select,我都在其周围加上一个div,以对其进行样式化,这通常很好。date\u select的问题在于,它生成三个选择框,所有选择框都被包装到一个div中。例如,在Haml中,字段的代码如下所示: .select-wrapper = f.date_select :birthday, :start_year =
date\u select
的问题在于,它生成三个选择框,所有选择框都被包装到一个div中。例如,在Haml中,字段的代码如下所示:
.select-wrapper
= f.date_select :birthday, :start_year => Time.now.year - 120, :end_year => Time.now.year
<%= select_month(@person.birthday, {field_name: "birthday(2i)", prefix: "person", prompt: true}, class: "class_name") %>
.select\u包装器
在所有三个选择框周围创建一个div,但我需要每个选择框都有自己的包装器。有没有办法解决这个问题
任何帮助都将不胜感激。谢谢。方法1(困难)
覆盖日期\u选择代码为您处理此特殊实例:
方法2(简单)
使用jQuery:
// Find all select boxes that have an ID attribute containing "birthday"
// and wrap a div tag around them with a certain class
$('select[id*="birthday"]').wrapAll('<div class="select_wrapper">');
//查找ID属性包含“生日”的所有选择框
//并用一个特定的类在它们周围包装一个div标记
$('select[id*=“birth”]).wrapAll('');
我使用的解决方案涉及参数:date\u separator
。
大致如下:
.select-wrapper
= f.date_select :birthday, :start_year => Time.now.year - 120, :end_year => Time.now.year, :date_separator => '</div><div class="select-wrapper">'
。选择包装器
=f.date\u选择:生日,:start\u year=>Time.now.year-120,:end\u year=>Time.now.year,:date\u separator=>
这不是最漂亮的,但对我来说效果很好
<div class="small-4 columns"><%= f.date_select :release_date, {date_separator: "</div><div class='small-4 columns'>"} %></div>
其中,
是我想要包装所有东西的地方。基本上只需确保日期分隔符是我的标签的关闭和下一个标签的打开,并确保我的第一个标签的打开在日期选择之前,最后一个标签的关闭在日期选择之后。在中,我基本上面临相同的问题
JavaScript不是我的选项,date\u分隔符
hack是。。。黑客:)
我提出了以下解决方案(在HAML中对我有效)。我认为这是迄今为止最干净的解决方案,但它依赖于一些Rails内部
- date_time_selector = ActionView::Helpers::DateTimeSelector.new(Time.current,
{ prefix: @usage.model_name.param_key,
field_name: :starttime.to_s,
include_position: true })
.select
= date_time_selector.select_year
.select
= date_time_selector.select_month
.select
= date_time_selector.select_day
.select
= date_time_selector.select_hour
.select
= date_time_selector.select_minute
您所要做的就是调整前缀(@usage
,在我的例子中)和字段名称(属性名称,@usage.starttime
/starttime
)。
在本例中,我将相应的日期字段包装在“select”类的div中
作为参考,还有更多选项可供选择,以下是相关代码的链接:
- (FormBuilders将使用此路径)
- (真正的肉)
我也有类似的问题,但我希望每个选择框都有自己的类
以下是我所做的(使用ERB而不是HAML):
然后,我可以使用适当的类将每个类包装在一个div中,但您也可以将类直接添加到select标记中,如下所示:
.select-wrapper
= f.date_select :birthday, :start_year => Time.now.year - 120, :end_year => Time.now.year
<%= select_month(@person.birthday, {field_name: "birthday(2i)", prefix: "person", prompt: true}, class: "class_name") %>
谢谢你的提示。我忘了回答一些问题,在那里我找到了自己的解决方案,现在我写下并接受了我找到并使用的答案,所以我的费率应该可以再正常不过了。正常的“wrap”方法不起作用,但我使用了wrapAll,所以感谢您的帮助。该链接不再有效。@xon1c更新。请随时编辑任何帖子,以解决未来的问题。