我是Rails的新手,只是在我的第一个独立项目中工作,但我似乎遇到了一个语法错误,常量没有被初始化(我已经得到了其中的几个,但每个似乎都有不同的因为.....不太确定我是如何因不同的原因而得到同样的错误:)):
uninitialized constant DatastringsController::Datastrings
DatastringsController:
class DatastringsController < ApplicationController
def new
end
def create
@datastrings = Datastrings.new(datastrings_params) #ERROR returned on this line
@datastrings.save
redirect_to @datastrings
end
def show
@datastrings = Datastrings.find(params[:id])
end
private
def datastrings_params
params.require(:datastrings).permit(:title, :text)
end
end
我相信我的表格是正确的:
<%= form_for :datastrings, url: datastrings_path do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
答案 0 :(得分:0)
你遇到的主要问题是:
<%= form_for :datastrings, url: datastrings_path do |f| %>
form_for确实应该填充ActiveRecord对象,因为这允许Rails构建它正确需要的相对路径。
虽然我不知道为什么这种情况,但您当前的设置基本上是在尝试呈现DatastringsController::Datastrings
- 主要是因为您没有设置form_for
正确
-
<强>修正强>
如果您想创建一个datastring
对象,请遵循约定并执行此操作:
#config/routes.rb
resources :datastrings
#app/controllers/datastrings_controller.rb
Class DatastringsController < ApplicationController
def new
@datastring = Datastring.new
end
def create
@datastring = Datastring.new(datastring_params)
@datastring.save
end
private
def datastring_params
params.require(:datastring).permit(:title, :text)
end
end
#app/views/datastrings/new.html.erb
<%= form_for @datastring do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
-
您还需要以奇异的名字命名您的模型
现在看一下,您的主要问题似乎是您已将模型命名为plural
。
这样做的原因是,当你加载Rails时,它会加载你的所有模型,因此,你可以通过引用它们的类名来调用它们。如果一个模型是复数,我不认为它会正确加载它,导致你突出显示的错误
如果您将模型命名为以下内容,则应该更好:
#app/models/datastring.rb
Class Datastring < ActiveRecord::Base
end