在Ruby on Rails中显示day[Sun, Mon, Tue,…]]而不是布尔字段true/false



我正在做一个项目,我必须安排活动。在添加事件时,用户可以在复选框上选择多个日期。你可以在这里查看图。

选择事件发生的日期。

为此我已经创建了数据库

def change
add_column :schedules, :sunday, :boolean
add_column :schedules, :monday, :boolean
add_column :schedules, :tuesday, :boolean
add_column :schedules, :wednesday, :boolean
add_column :schedules, :thursday, :boolean
add_column :schedules, :friday, :boolean
add_column :schedules, :saturday, :boolean
end

我选择日期的部分形式是这样的x-special/nautilus-clipboard复制

.field
= f.check_box :sunday
= f.label :day, "Sunday",class:"mx-2"
br
= f.check_box :monday
= f.label :day, "Monday",class:"mx-2"
br
= f.check_box :tuesday
= f.label :day, "Tuesday",class:"mx-2"
br
= f.check_box :wednesday
= f.label :day, "Wednesday",class:"mx-2"
br
= f.check_box :thursday
= f.label :day, "Thursday",class:"mx-2"
br
= f.check_box :friday
= f.label :day, "Friday",class:"mx-2"
br
= f.check_box :saturday
= f.label :day, "Saturday",class:"mx-2"

我面临的问题是,我填写表单,结果我得到true的fase,而清单,因为布尔字段。我想将索引页显示的结果更改为星期日,星期一,…x-special/nautilus-clipboard复制

显示日期为真或假我把参数传递给控制器

def schedule_params
params.require(:schedule).permit(:name,:begindate,:enddate,:campaign_id,:sunday,:monday,:tuesday*,:wednesday,:thursday,:friday,:saturday)<br>
end

提前感谢!!忽略我的发布方式,因为我是新来的,这是我的第一个帖子

我认为@Mosaaleb的答案已经足够好了

我的版本是:

def occur_days
days = %w[sunday monday tuesday wednesday thursday friday saturday]
days.select { |d| attributes[d] }.join(', ')
end
schedule.sunday = true
schedule.friday = true
schedule.occur_days
# => sunday, friday

您可以在日程模型中编写一个方法,将日期字符串映射到日程的日期值:

def day_names
Date::DAYNAMES.zip([sunday, monday, tuesday, wednesday, thursday, friday, saturday]).to_h
end

返回如下内容:

schedule.day_names
# => {"Sunday"=>true, "Monday"=>true, "Tuesday"=>false, "Wednesday"=>false, "Thursday"=>false, "Friday"=>true, "Saturday"=>true}

然后在视图中使用它来显示具有真值的天数

最新更新