Ruby on Rails控制器语法

时间:2014-08-23 06:25:02

标签: ruby-on-rails ruby

我是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 %>

1 个答案:

答案 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