我是ruby on rails的新手。我收到了这个错误。我已按照本教程http://www.codelearn.org/ruby-on-rails-tutorial/forms-form_tag-params-attr_accessible-model-validation 用于表单发布。但是,当我点击提交时,我收到了错误
这是我的 控制器class CompanyratingController < ApplicationController
def index
@companies = Companyrating.all
end
def add
#companies.create(:companies => params[:name, :place, :rate, :rank])
#redirect_to :action => 'index'
@companies = Companyrating.new(params[:name])
if @companies.save
flash[:success] = "Welcome to My Space!"
redirect_to root_url
end
end
end
这是模态
class Companyrating < ActiveRecord::Base
attr_accessible :name, :place, :rate, :rank
end
这是我的路线档案
get "companyrating/index"
match "companyrating/add" => "todos#add", :via => :post
我的索引文件
<title>Shared Todo App </title>
<h1>Shared Todo App</h1>
<p>All your todos here</p>
<ul><li> <% @companies.each do |t| %>
<li> <%= t.companies_name %> </li>
<li> <%= t.companies_place %> </li>
<li> <%= t.companies_rate%> </li>
<li> <%= t.companies_rank %> </li>
<% end %>
</li></ul>
<%= form_for("@companies/add", :method=>"post") do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :place %>
<%= f.text_field :place %>
<%= f.label :rate %>
<%= f.text_field :rate %>
<%= f.label :rank %>
<%= f.text_field :rank %>
<%= f.label :user_id%>
<%= f.text_field :user_id %>
<%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>
这是我的错误:没有路线匹配[POST]“/ companyrating / index”
任何人都可以帮我解决这个错误
答案 0 :(得分:1)
:
def new
@companyrating = Companyrating.new
end
def create
@companies = Companyrating.new(params[:companyrating])
if @companies.save
flash[:success] = "Welcome to My Space!"
redirect_to root_url
else
flash[:error] = "Can't create companyrating."
render 'new'
end
end
在routes.rb中:
resources :companyrating
形式:
<%= form_for(@companyrating, method: :post) do |f| %>
答案 1 :(得分:0)
您所遇到的问题有两方面 - 您的routes
和controller actions
我知道Monk_Code给出了答案,但是既然你是新手,我将解释它是如何为你工作的,目的是帮助你更好地理解系统:
<强>路线强>
你的第一个问题是你的路线
Rails在创建出色的路由结构方面做得非常出色,其核心是resourceful
routes
通过使用以下代码,您的Rails应用程序会创建一系列7条路由,Rails使用这些路由向控制器操作发送“默认”流量:
#config/routes.rb
resources :companyratings
此路由结构在您的应用中创建以下路由:
- new [GET]
- index [GET]
- 创建[POST]
- 编辑[GET]
- 更新[POST]
- 销毁[DELETE]
- 显示[GET]
所有这些路由都采用定向流量,路由它采用相关的控制器操作。这意味着,如果您将用户发送到/companyratings/
,则会加载index
操作,同样/companyratings/15
将显示控制器中的show动作
除此之外,您还需要知道HTTP“动词”的作用。这是Rails用于相应地路由您的流量的关键原则。请求中的“动词”是发送的请求类型,并且取决于浏览器
从上面的列表中可以看出,每个路由都有一个关联的HTTP动词。这很重要的原因是因为如果您向只能使用[GET]
动词的路由发送[DELETE]
请求,那么您将遇到问题,因此您在看到错误时会遇到错误您向[POST]
行动发送了index
个请求
您应该阅读Rails tutorial,因为您可以通过发送正确的HTTP动词(使用:method => :get
)来解决问题,或者在{{[POST]
中指定index
动词1}}行动路线
控制器操作
控制器操作是控制器中定义的函数,在Rails中运行特定请求时会加载该函数
上面列出了默认索引操作,但只要提供正确的路由,您也可以拥有自己喜欢的任何其他操作。您的问题是您刚刚使用了add
操作,您应该使用create
操作:
class CompanyratingController < ApplicationController
def index
@companies = Companyrating.all
end
def new
@companyrating = Companyrating.new
end
def create
@companies = Companyrating.new(new_company_rating)
if @companies.save
flash[:success] = "Welcome to My Space!"
redirect_to root_url
end
end
private
def new_company_rating
params.require(:company_rating).permit(:variables, :listed, :here)
end
end