我对Rails完全不熟悉。刚刚从http://guides.rubyonrails.org/getting_started.html开始 虽然尝试我遇到redirect_to问题,如下面的错误 -
NoMethodError in SwversionsController#create
undefined method `sw_versions_url' for #<SwversionsController:0xa38d158>
Rails.root: C:/Sites/edisonprojectmanagement
Application Trace | Framework Trace | Full Trace
app/controllers/swversions_controller.rb:19:in `create'*
单击“提交”按钮后会出现此错误。我发现模型工作正常,数据保存在我的postgresql数据库中。 我认为问题在于我的redirect_to方法。
我的SwVersionsController代码看起来像 -
class SwversionsController < ApplicationController
def index
end
def show
@swversion = SwVersion.find(params[:id])
end
def new
end
def create
@swversion = SwVersion.new(swversion_params)
@swversion.save
redirect_to @swversion
end
private
def swversion_params
params.require(:swversion).permit(:sw_version, :description)
end
end
new.html.erb代码是 -
<h1> New SW versions </h1>
<%= form_for :swversion, url: swversions_path do |f| %>
<p>
<%= f.label :sw_version, "SW Version" %> <br>
<%= f.text_field :sw_version %>
</p>
<p>
<%= f.label :description, "Description" %> <br>
<%= f.text_area :description %>
</p>
<p>
<%= f.submit "Submit" %>
</p>
<% end %>
我的routes.rb很简单
Rails.application.routes.draw做 资源:转换 得到'欢迎/索引
有人请帮我解决这个问题
答案 0 :(得分:1)
未定义的方法`sw_versions_url&#39;对于SwversionsController:0xa38d158
命名约定:
Rails在命名方面非常严格,并且有充分的理由。 Rails期望类名为 CamelCase ,方法/变量为 snake_case 。
您的 模型类名称 为SwVersion
,因此方法/变量名称应为sw_version
而不是swversion
。因此,您应该在整个代码中将swversion
更改为sw_version
您还应将 控制器类名称 更改为SwVersionsController
。
如果resources :swversions
中有routes.rb
,那么您应将其更改为resources :sw_versions
有关 命名惯例的更多信息 here
答案 1 :(得分:0)
试试这段代码:
redirect_to sw_version_path(@swversion)