我有一个新手问题。
我有一个带有下拉列表的基本表单,如下所示:
## apply.html.erb
<%= form_for @category do |f| %>
<%= f.label 'parent' , 'Category' %>
<%= f.select :category, [["foo", 0 ], ["bar", 1 ]] %>
<% end %>
下拉列表值为"foo"
和"bar"
。
我正在尝试直接从数据库中提取值。问题是我不知道如何组织controller
和model
。
这是控制器:
## Welcome_controller.rb
class WelcomeController < ApplicationController
def index
end
def apply
@category = 'foobar'
end
end
我还没有生成控制器。在网上找不到我的问题或教程的任何令人信服的答案。
有什么想法可以实现吗?
**编辑**
所以我一直在做一些编辑。这就是我的内容:
视图
## apply.html.erb
<%= form_for @category, as: :category do |f| %>
<%= f.label 'Categories' %>
<%= f.select :category, @category %>
<% end %>
控制器:
## welcome_controller.rb
def apply
@category = Category.new
@categories = Category.pluck(:id, :name)
end
模型:
## Category.rb
class Category < ApplicationRecord
end
我在终端中得到以下内容:
ActionView::Template::Error (undefined method `categories_path' for #<#<Class:0x007ffb7c5a2808>:0x007ffb7c2814f8>):
3: <div id="category_block">
4: <span>What would you like to get financed ?</span>
5:
6: <%= form_for @category, as: :category do |f| %>
7: <%= f.label 'Categories' %>
8: <%= f.select :category, @category %>
9: <% end %>
app/views/welcome/apply.html.erb:6:in `_app_views_welcome_apply_html_erb___747255529581383389_70359048261520'
问题似乎出自@category = Category.new
,因为当我用Category.new
之类的字符串替换' foobar'
时,错误消失了。
您知道如何解决此问题吗?
答案 0 :(得分:0)
您应该阅读有关documentation的更多信息。这是一个非常基本的问题,如果您花时间阅读和学习,您可能会得到答案。
也就是说,您提供的信息不足,所以我就假设。
首先,我假设您有一个Category
模型。它应该放在app/models/category.rb
中:
def Category
...
end
接下来,您实际上并没有从数据库中查询任何内容。您可以这样操作:
## app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
def index
end
def apply
@category = Category.new
@categories = Category.pluck(:name, :id)
end
end
Category.new
生成Category
(category.rb
)对象的新实例。
Category.pluck(:name, :id)
生成以下数组:[['foo', 1], ['bar', 2]]
,其中name
和id
是Category
模型的属性(只需根据自己的喜好更改)。
一旦数组存储在@categories
中,就可以像下面这样在表单中使用它:
## app/views/welcome/apply.html.erb
<%= form_for @category do |f| %>
<%= f.label 'parent' %>
<%= f.select :category, @categories %>
<% end %>
考虑到您有一个类别下拉列表,您可能不打算实际为Category
创建一个表单,因此您应该将其更改为其他形式。另外,请注意文件名。它们都是小写字母,并由下划线分隔。 (Welcome_controller.rb
应该是welcome_controller.rb
)
**编辑**
现在您已经向form_for
添加了一个对象,除非您更改它,否则rails会自动为表单分配一个路径。在这种情况下,路径为categories_path
。了解更多here。
您需要做的是修改routes.rb
并添加以下行:
resources :categories
该行将自动生成路由,该路由提供HTTP动词和URL之间到控制器动作的映射。
接下来,您需要创建一个CategoriesController
:
## app/controllers/categories_controller.rb
class CategoriesController < ApplicationController
def create
@category = Category.new(category_params)
if @account_user.save
redirect_to apply_path
else
render :new
end
end
private
def category_params
params.require(:category).permit! # MODIFY THIS
end
end
无论如何,这基本上是一个演练,您应该自己弄清楚。有很多资源-不难找到一个。您还可以查看以下内容:video。