Ruby on Rails中的路由4

时间:2013-10-23 10:42:33

标签: ruby-on-rails ruby ruby-on-rails-3 web routes

美好的一天,我遇到了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”

视图中的路线有问题吗?谢谢

2 个答案:

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