【发布时间】:2014-07-29 19:37:06
【问题描述】:
我是 RoR 的新手,我一直在搜索和搜索,但似乎找不到解决方案。我有一个简单的表格:
<%= form_for @case do |f| %>
<%= f.select( :case, options_for_select([['CASE1','CASE1'],['CASE2','CASE2'],['CASE3','CASE3'],['CASE4','CASE4']])) %>
<% end %>
那是在我的导航栏中。它不基于数据库中的任何表。
控制器:
class MyAppController < ApplicationController
before_filter :initialize_remote_user
def self.search(name)
@results = MyApp.search(params[:name])
@case = params[:case]
end
def result
@results = MyApp.where("name = ?",params[:name]).order("item_scan_date ASC")
puts @results.inspect
end
def update
end
def change
end
def show
@case = params[:case].inspect
end
def create
end
def new
end
def index
end
private
def name_params
params.require(:name).permit(:name)
end
def case_params
params.require(:case).permit(:case, :id)
end
当我有@case = params[:case].inspect 时,它没有任何错误,但它不会从<%= form_for @case do |f| %> 中提取数据
我试过了
def show
@case = Case.find(params[:case])
end
但在@case = Case.find(params[:case]) 出现NameError uninitialized constant MyAppController::Case 错误
除了nil 之外,我似乎无法让@case 拉出任何东西
如果我在def show 中有@case = params[:case],我会在<%= form_for @case do |f| %> 得到'ArgumentError First argument in form cannot contain nil or be empty error
【问题讨论】:
-
作为一种风格说明,
where(name: params[:name])比写出 SQL 本身更可取。 -
什么是
case?如果您使用的是form_for,它应该是您正在使用的某种模型。否则你需要使用低级的form_tag方法。 -
@ todman
case只是一个变量名。我将form_for更改为form_tag,我得到NoMethodError undefined methodselectfor nil:NilClass。如果我将select更改为select_tag相同的错误消息。在我得到form_for之前,我已经关注guides.rubyonrails.org/form_helpers.html 以实际工作而没有错误。 -
@tadman
where查询基于输入表单。我花了一段时间才让它真正起作用。 -
select_tag用于那些没有内在绑定到表单的人。该方法应该在您的视图中定义。form_for之所以“工作”是因为您的表单是正确的,但它正在针对错误的数据进行测试。
标签: ruby-on-rails forms ruby-on-rails-4 form-for