我有我的问题,有点解决,但我认为它有点笨拙的方式,所以希望得到一个更好的方式,以及更好的理解这里发生了什么。
_form.html.erb:
docker
products_controller.rb:
SELECT
Percentage_of_Marks,mark,test_id,
1+
(
SELECT count(*)
from user_test a
WHERE a.Percentage_of_Marks > b.Percentage_of_Marks
) as RNK,
Percentage_of_Marks
FROM user_test b
where b.test_id='$test_id'
ORDER BY b.Percentage_of_Marks DESC limit 1
如果用户在未选择任何 <%= select_tag(:category_id, options_for_select(@categories), :prompt => "Select one!") %>
选项的情况下提交表单,则会收到def new
@product = Product.new
@categories = Category.all.map { |c| [ c.name, c.id ] }
end
错误。
我知道它来自我的select_tag
undefined method 'map' for nil:NilClass
,但我无法想象如何避免这种情况......?
我的最终解决方案,即工作:
@categories
但我觉得有更好的方法。另外我认为,通过使用nil
分配默认的<%= select_tag(:category_id, options_for_select(@categories || Category.all.map { |c| [ c.name, c.id ] }), :prompt => "Select one!") %>
值可能也可以,但我不能用我的Ruby语法知识来实现它...
答案 0 :(得分:3)
请尝试使用select_tag的方式:
select_tag(:category_id, options_from_collection_for_select(Category.all, :id, :name), include_blank: "Select Category")
如果您遇到任何问题,请告诉我。
答案 1 :(得分:0)
是的,你可以使用辅助方法而不是在每个视图中使用Category.all
def categories
Category.all.map { |c| [ c.name, c.id ] }
end
并在视图中使用
<%= select_tag(:category_id,
options_for_select(categories),
include_blank: "Select Category") %>