在 Rails 上连接 Ruby 中的复选框
concating checkboxes in Ruby on Rails
我有一个名为 delivery_day
的字段,它是 delivery_preference
模型中的 string
类型。
形式上,我想提供7个checkboxes像周日,周一等每一天,以后想concat。
例如,如果用户检查周日和周五,我想将其作为 "Sunday,Friday"
连接并存储在 delivery_day
字段中。
提前致谢!!
我还没有足够的声誉来发表简短的评论。但是,您的迁移 delivery_day
中是否有类似于 t.boolean :public, default: true_or_false_here
的内容?
如果是这样,在 form
中,您可以有类似的内容:
...
<div class="form-group">
<%= f.label :public, class: 'checkbox' do %>
<%= f.check_box :public %> Monday
<% end %>
</div>
<div class="form-group">
<%= f.label :public, class: 'checkbox' do %>
<%= f.check_box :public %> Tuesday
<% end %>
</div>
...
在上述之后,您可以指定(通过布尔逻辑)您的 "concat & store it as "Sunday,Friday
"
可能有更好的解决方案,但是当我遇到类似问题时,我使用check_box_tag
解决了。
<%= check_box_tag "delivery_preference[delivery_day][0]", 'monday' %>Monday
<%= check_box_tag "delivery_preference[delivery_day][1]", 'tuesday' %>Tuesday
<%= check_box_tag "delivery_preference[delivery_day][2]", 'wednesday' %>Wednesday
<%= check_box_tag "delivery_preference[delivery_day][3]", 'thursday' %>Thursday
<%= check_box_tag "delivery_preference[delivery_day][4]", 'friday' %>Friday
<%= check_box_tag "delivery_preference[delivery_day][5]", 'saturday' %>Saturday
<%= check_box_tag "delivery_preference[delivery_day][6]", 'sunday' %>Sunday
然后您将在控制器中收到一个类似于 { deliver_day: ['monday', 'tuesday'] } 的数组。您可以选择在您的控制器中进行连接,然后保存,或者您可以将逻辑移动到您的模型中。
在你的控制器中,你的强参数应该像
params.require(:delivery_preference).permit(.., :deliver_day => [])
允许数组。
你可以这样设计你的表单-
<%= form_for @delivery_preference do |f|%>
<%= f.check_box :delivery_day, {multiple: true}, "Sunday" %>Sunday
<%= f.check_box :delivery_day, {multiple: true}, "Monday" %> Monday
<%= f.submit "Add" %>
<% end %>
提交表单后,您可以在控制器中选择复选框,如下所示:
def your_action_name
params[:delivery_preference][:delivery_day].delete("0")
DeliveryPreference.create(delivery_day: params[:delivery_preference][:delivery_day].join(","))
end
希望对您有所帮助!
我有一个名为 delivery_day
的字段,它是 delivery_preference
模型中的 string
类型。
形式上,我想提供7个checkboxes像周日,周一等每一天,以后想concat。
例如,如果用户检查周日和周五,我想将其作为 "Sunday,Friday"
连接并存储在 delivery_day
字段中。
提前致谢!!
我还没有足够的声誉来发表简短的评论。但是,您的迁移 delivery_day
中是否有类似于 t.boolean :public, default: true_or_false_here
的内容?
如果是这样,在 form
中,您可以有类似的内容:
...
<div class="form-group">
<%= f.label :public, class: 'checkbox' do %>
<%= f.check_box :public %> Monday
<% end %>
</div>
<div class="form-group">
<%= f.label :public, class: 'checkbox' do %>
<%= f.check_box :public %> Tuesday
<% end %>
</div>
...
在上述之后,您可以指定(通过布尔逻辑)您的 "concat & store it as "Sunday,Friday
"
可能有更好的解决方案,但是当我遇到类似问题时,我使用check_box_tag
解决了。
<%= check_box_tag "delivery_preference[delivery_day][0]", 'monday' %>Monday
<%= check_box_tag "delivery_preference[delivery_day][1]", 'tuesday' %>Tuesday
<%= check_box_tag "delivery_preference[delivery_day][2]", 'wednesday' %>Wednesday
<%= check_box_tag "delivery_preference[delivery_day][3]", 'thursday' %>Thursday
<%= check_box_tag "delivery_preference[delivery_day][4]", 'friday' %>Friday
<%= check_box_tag "delivery_preference[delivery_day][5]", 'saturday' %>Saturday
<%= check_box_tag "delivery_preference[delivery_day][6]", 'sunday' %>Sunday
然后您将在控制器中收到一个类似于 { deliver_day: ['monday', 'tuesday'] } 的数组。您可以选择在您的控制器中进行连接,然后保存,或者您可以将逻辑移动到您的模型中。
在你的控制器中,你的强参数应该像
params.require(:delivery_preference).permit(.., :deliver_day => [])
允许数组。
你可以这样设计你的表单-
<%= form_for @delivery_preference do |f|%>
<%= f.check_box :delivery_day, {multiple: true}, "Sunday" %>Sunday
<%= f.check_box :delivery_day, {multiple: true}, "Monday" %> Monday
<%= f.submit "Add" %>
<% end %>
提交表单后,您可以在控制器中选择复选框,如下所示:
def your_action_name
params[:delivery_preference][:delivery_day].delete("0")
DeliveryPreference.create(delivery_day: params[:delivery_preference][:delivery_day].join(","))
end
希望对您有所帮助!