Ruby on rails 将选择输入更改为用作Rails中的开/关切换开关的复选框
我有一组7个下拉输入,允许管理员说他们在给定的一天是营业还是营业。我想将其更改为7个打开/关闭开关(可能是样式化的复选框?),但不知道如何做到这一点 以下是我目前拥有的相关代码位(在任何更改之前): app/view/backend/inventory\u pool/edit.html.hamlRuby on rails 将选择输入更改为用作Rails中的开/关切换开关的复选框,ruby-on-rails,forms,haml,Ruby On Rails,Forms,Haml,我有一组7个下拉输入,允许管理员说他们在给定的一天是营业还是营业。我想将其更改为7个打开/关闭开关(可能是样式化的复选框?),但不知道如何做到这一点 以下是我目前拥有的相关代码位(在任何更改之前): app/view/backend/inventory\u pool/edit.html.haml - content_for :title, @inventory_pool = form_for [:backend, @inventory_pool], html: {name: "form"}
- content_for :title, @inventory_pool
= form_for [:backend, @inventory_pool], html: {name: "form"} do |f|
.content
- if is_admin?
%a.button{:href => root_path}= _("Cancel")
%button.button{:type => :submit}= _("Save %s") % _("Inventory Pool")
%section
%h2= _("Basic Information")
.inner
.field.text
.key
%h3= "#{_("Print Contracts")}"
%p.description
.value
.input
%input{type: "checkbox", name: "inventory_pool[print_contracts]", checked: @inventory_pool.print_contracts}
%section#workdays
%h2= _("Workdays")
.inner
- [1,2,3,4,5,6,0].each do |i|
.field.text
.key
%h3= "#{I18n.t('date.day_names')[i]}"
.value
.input
%select{:name => "store[workday_attributes][workdays][]"}
%option{:label => _("Open"), :value => Workday::WORKDAYS[i]}= _("Open")
%option{:label => _("Closed"), :value => "", :selected => @store.workday.closed_days.include?(i) ? true : nil}= _("Closed")
app/models/workday.rb
class Workday < ActiveRecord::Base
belongs_to :inventory_pool
WORKDAYS = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]
def is_open_on?(date)
return false if date.nil?
case date.wday
when 1 return monday
when 2 return tuesday
when 3 return wednesday
when 4 return thursday
when 5 return friday
when 6 return saturday
when 0 return sunday
else
return false #Should not be reached
end
end
def closed_days
days = []
days << 0 unless sunday
days << 1 unless monday
days << 2 unless tuesday
days << 3 unless wednesday
days << 4 unless thursday
days << 5 unless friday
days << 6 unless saturday
days
end
def workdays=(wdays)
WORKDAYS.each {|workday| write_attribute(workday, wdays.include?(workday) ? true : false)}
end
end
这可能是一个相当大的变化,但我发现最好的方法是类似于。本教程非常棒,设置起来也比较快,应该可以很容易地从用户角色(本教程中使用的)映射到应用程序中的
工作日的一周中的几天。好。在haml中,我必须替换:
.input
%select{:name => "store[workday_attributes][workdays][]"}
%option{:label => _("Open"), :value => Workday::WORKDAYS[i]}= _("Open")
%option{:label => _("Closed"), :value => "", :selected => @store.workday.closed_days.include?(i) ? true : nil}= _("Closed")
与:
谢谢这很有用,因为我是Ruby和Rails新手,不熟悉check_-bog_标记语法。我想我已经解决了。太棒了!如果此答案有帮助,请勾选此答案以结束问题!:)
.input
%select{:name => "store[workday_attributes][workdays][]"}
%option{:label => _("Open"), :value => Workday::WORKDAYS[i]}= _("Open")
%option{:label => _("Closed"), :value => "", :selected => @store.workday.closed_days.include?(i) ? true : nil}= _("Closed")
= check_box_tag "inventory_pool[workday_attributes][workdays][]", Workday::WORKDAYS[i], @inventory_pool.workday.closed_days.include?(i) ? nil : true