Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在Rails中用div包装每个日期选择?_Ruby On Rails 3_Forms_Html_Wrapper - Fatal编程技术网

Ruby on rails 3 如何在Rails中用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 =

我正在使用RubyonRails3为用户创建一个表单,用户可以在其中保存自己的生日。控制器和模型周围的所有操作都可以正常工作。但是我在这个表单的样式上遇到了问题

对于表单中的每一个select,我都在其周围加上一个div,以对其进行样式化,这通常很好。
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更新。请随时编辑任何帖子,以解决未来的问题。