hom*_*ior 4 postgresql checkbox ruby-on-rails ruby-on-rails-5
我使用的是 PostgreSQL 数据库和 Rails 5.0.6。我尝试为我工作的学校构建一个课程分配 WebApp。对于每门课程,教师可以选择允许访问课程的表格。
迁移文件:
def up
create_table :courses do |t|
t.integer :number, null: false
t.string :name, null: false
t.text :description, null: false
t.decimal :level, array: true, default: []
t.integer :max_visitor, null: false
t.integer :min_visitor
t.integer :pos_visit
t.timestamps
end
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器中:
params.require(:course).permit(:number, :name, :description, :level [], :max_visitor, :min_visitor, :pos_visits)
Run Code Online (Sandbox Code Playgroud)
我已经读过这篇文章:Rails 5 strong params with an Array inside check boxes values。但是params.require(:product).permit(:id, **category_ids: []**)即使我也使用 rails 5,语法对我不起作用。我不确定是否:level []真的有效,但它似乎是正确的语法。
这是我的表格:
<%= form_for @course do |t| %>
<%= t.text_field :number, class: 'form-control' %>
<%= t.text_field :name, class: 'form-control' %>
<%= t.text_area :description, class: 'form-control' %>
<%= t.check_box :level[], 1%>
<%= t.check_box :level[], 2%>
<%= t.check_box :level[], 3%>
<%= t.check_box :level[], 4%>
<%= t.text_field :max_visitor, class: 'form-control' %>
<%= t.text_field :min_visitor, class: 'form-control' %>
<%= t.text_field :pos_visit, class: 'form-control' %><br/>
<%= t.submit "bestätigen", class: "btn btn-success"%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这个 check_box 语法似乎是错误的。任何人都可以帮助我使用 check_boxes 的正确语法吗?感谢帮助。
有一个collection_check_boxes辅助方法:
<%= form_for @course do |f| %>
<%= f.collection_check_boxes(:level, { 'One': 1, 'Two': 2, 'Three': 3 }, :last, :first) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
第三个参数是用于从“集合”中获取值的方法,第四个参数是用于从“集合”中获取标签的方法。这个辅助方法会自动将 Hash 转换为数组,这就是我在这里使用last和的原因first。
也可以按照您想要的方式设置样式,例如使用 Bootstrap:
<%= f.collection_check_boxes(:level, { 'One': 1, 'Two': 2, 'Three': 3 }, :last, :first) do |b| %>
<div class="form-check form-check-inline">
<%= b.check_box class: 'form-check-input' %>
<%= b.label class: 'form-check-label' %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
<%= check_box_tag \'level[]\', 1%>\n<%= check_box_tag \'level[]\', 2%>\n<%= check_box_tag \'level[]\', 3%>\n<%= check_box_tag \'level[]\', 4%>\nRun Code Online (Sandbox Code Playgroud)\n\n但是,当您在 form_for 中使用 check_box_tags 时,参数level[], 将位于您通常在controller#new 函数中使用的强参数数组之外。
Parameters: {"course"=>{"number"=>"12", "name"=>"tanzen", "description"=>"efwefggw", "max_visitor"=>"12", "min_visitor"=>"5", "pos_visit"=>"2"}, "level"=>["1", "3", "4"], "commit"=>"best\xc3\xa4tigen"}\nRun Code Online (Sandbox Code Playgroud)\n\n所以我手动添加了级别
\n\n@course = Course.new(course_params)\n@course.level = params[:level]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5966 次 |
| 最近记录: |