美好的一天,我遇到了Ruby on Rails 4中的路线问题
错误:
undefined method `routes_path'
查看:
<h1>Load data</h1>
<div class="row">
<div class="span6 offset3">
`<%= form_for @route, :html => { :multipart => true } do %>
<%= hidden_field_tag 'current_user', @current_user %>
<%= file_field_tag :file %>
<%= submit_tag "Import", style: 'margin-top: -10px', class: "btn btn-primary" %>
<% end %>
控制器:
def new
@route = current_user.build_route
end
def create
nil_flag = Route.import(params[:file], current_user)
if nil_flag == 1
flash[:success] = "Data created."
redirect_to route_path(current_user)
else
flash[:error] = "Error"
redirect_to load_data_path
end
end
型号:
def self.import(file, current_user)
@user = current_user
@route = @user.build_route
@nil_flag = 0
File.open(file.path, 'r') do |f|
.
.
.
#etc
end
路线
将'/ load_data'匹配为:'routes #new',来自:'get'
视图,控制器和模型被命名为“Route”
视图中的路线有问题吗?谢谢
答案 0 :(得分:3)
正如第一印象一样,如果不详细研究它 - 您可能无法使用路线作为班级名称,它已经是ActionDispatch
下的班级名称。
但是,我认为你的问题实际上是你的路线:
match '/load_data', to: 'routes#new', via: 'get'
这不是资源路由,它不会生成允许您使用表单标记语法<%= form_for @route...
将路线定义为资源:
resources :routes
或者在表单中定义网址:
<%= form_for @route, :url => some_url, :html => { :multipart => true } do %>
答案 1 :(得分:1)
Matt(之前的答案作者)几乎回答了这个问题,只是想注意你也可以将as
选项附加到你的路线上给它命名:
match '/load_data', to: 'routes#new', via: 'get', as: 'routes'
这将为您“定义”routes_path
。