2013-06-25 3 views
0

У меня есть метод, который я вызываю по имени verify. Задача состоит в том, чтобы изменить логическое значение от false до true в строке таблицы. Он принимает параметр (объект, который нуждается в логическом изменении), но я получаю ошибку маршрутизации.Маршрутизация пользовательского метода с параметром

Мой маршрут:

 get 'verify/:u_business', :action => 'verify', :as => 'verify' 

Когда я запускаю рейк маршруты он выглядит именно так, как мне нужно, но я получаю ошибку No route matches когда я запускаю сайт.

Update:

код в страницу, которая использует для маршрута

  <table class="table table-striped" style:"width:100%;"> 
      <tr> 
      <th style="width:20%">Name</th> 
      <th style="width:40%">Address</th> 
      <th style="width:30%">Telephone number</th> 
      <th style="width:10%">Verify</th> 
      </tr> 
      <% @unverified.each do |b| %> 
      <tr> 
      <td><%= b.name %></td> 
      <td><%= b.address %></td> 
      <td><%= b.reward %></td> 
      <td><%= link_to 'Verify', verify_user_path(b) %></td> 
      </tr> 
     <% end %> 
     </table> 

А вот проверить метод:

def verify(u_business) 
if current_user.admin? 
    u_business.verified = true; 
end 

конец

Подробнее:

У меня две модели. Модель User и модель Business. У каждого пользователя может быть один бизнес. Бит, над которым я работаю, позволяет администраторам проверять бизнес, установив для verified? значение boolean в true.

Когда я бег рек маршрутов я получаю это:

verify_user GET /users/:id/verify/:u_business(.:format) users#verify

+0

Когда вы «запустили сайт»? У вас есть страница, которая пытается использовать помощник маршрута? Если да, покажите это. –

+0

@DaveNewton Добавлено выше. –

+0

Что такое 'verify_user_path'? Ваш маршрут называется 'verify'. –

ответ

0

Вам необходимо пройти в потребителе, а также.

verify_user GET /users/:id/verify/:u_business(.:format) users#verify 

verify_user(@user, @business) 

В противном случае, как бы он знал, как создать полную ссылку?

+0

Я не должен был пропустить это! Спасибо за помощь. –

+0

@kmcgrady Нет проблем. Однако я бы подумал о том, чтобы использовать надлежащие вложенные ресурсы. –

0

простой способ установить это (простите мой pseudocoding здесь)

В routes.rb

resources :business do 
    get 'verify', :on => :member 
end 

Это добавит GET маршрут как/предприятия/1/проверять и, без какого-либо специального обработки, создайте маршруты в verify_business_path.

Затем вы можете сделать

verify_business_path(business) 

Для генерации URL в ваших взглядах.

В контроллере:

def verify 
    @business = Business.find params[:id] 
    if current_user.admin? 
    @business.verified = true 
    end 
    # save, render, etc 
end 

Это будет следовать рекомендациям, так как вам не нужен специальный: параметр u_business, просто использовать рельсы, предоставляемые: идентификатор. И пользователь в этом контексте является несущественным, поэтому такой маршрут, как verify_user, неестественен. Вам просто интересно, является ли зарегистрированный пользователь администратором, поэтому этот маршрут должен быть привязан к бизнес-модели, а не к пользователю.

Надеюсь, что это поможет!

+0

Спасибо за советы. Это кажется более естественным способом сделать это. –

+0

Я попытался переключиться на этот метод, но он, похоже, не сохраняет изменения. Я просто вызываю @ business.save после того, как я установил проверенную переменную. Это правильно? –

+0

В значительной степени. если @ business.save redirect_to и т. д. – GoGoCarl