2014-02-07 2 views
0

У меня есть следующие маршруты:Нет маршрут не совпадает с элементом в ресурсах Rails

resources :sources do 
    member do 
     get 'parse' 
    end 
    end 

И следующий контроллер:

class SourcesController < ApplicationController 
before_filter :authenticate_admin! 

def index 
    @sources = Source.all 
end 

def parse 
end 
end 

У меня есть форма, что я хотел бы, чтобы вызвать действие синтаксического анализа в контроллер. Я делаю это так:

<% @sources.each do |source| %> 
    <tr> 
    <td><%= source.name %></td> 
    <td><%= source.url %></td> 
    <td> 
     <%= form_for source, url: {action: 'parse'} do |f| %> 
     <%= f.submit "Parse this source" %> 
     <% end %> 
    </td> 
    </tr> 


<% end %> 

И я получаю:

Failure/Error: visit "/sources" 
    ActionView::Template::Error: 
     No route matches {:action=>"parse", :controller=>"sources"} 

Кроме того, в моих реках маршрутах, я вижу это:

parse_source GET/источники /: идентификатор/синтаксические (.: формат) источники # parse

Почему это? Разве мое действие не определено?

ответ

1

Использование form_for [:parse, source].

Проблема заключается в том, что вы не добавляете source к URL-адресу, поэтому нет id в соответствии с требованиями маршрута. Вам нужно использовать url: { action: 'parse', id: source.id }, но форма [:parse, source] более ясна и короткая.

+0

Спасибо за быстрый ответ. Я получаю это, если это так: 'undefined method' model_name 'для Symbol: Class'' –

+0

Интересно. Почему я не смог бы выполнить form_for [source,: parse] - Doing '' url: {action: 'parse', id: source.id}, method:: get'' works ... –

+0

К сожалению, что назад. Это '[: parse, source]'. – meagar

0

form_for source, url: parse_source_url (source.id) do | f |

Вы также можете использовать выше, чтобы решить эту

Смежные вопросы