Ruby on Rails: пользовательские действия (продолжение) - PullRequest
0 голосов
/ 12 июля 2011

Этот вопрос является продолжением предыдущего вопроса: Ruby on Rails: пользовательские действия

Как продолжение, какой будет синтаксис использования настраиваемого действия в form_for? Для моего приложения у меня есть часть с именем _invite_form.html.erb, и я настроил форму, чтобы иметь спецификацию: url, которая, как я думал, свяжет форму с действием приглашения на контроллере Users:

 <div id = "invite_form">
<h1>Invite</h1> 
<%= form_for(invited, :url => invite_user_path) do |f| %>
    <div class="field">
        <%= f.text_field :email, :class => "inputform round", :placeholder => "email" %>
    </div>
    <div class="actions">
        <%= f.submit "Invite", :class => "submit_button round" %>
    </div>  
<% end %>
 </div>

Этот частичный вызывается на определенных страницах, и эта ошибка выдается:

  "No route matches {:action=>"invite", :controller=>"users"}"

В моем файле rout.rb я включил соответствующие строки:

 resources :users do
     member do
      get :invite
      post :invite
    end
 end

Почему маршрут не работает? Как изменить эти файлы, чтобы форма использовала действие «Пригласить» на контроллере «Пользователи»?

** Забыл упомянуть ранее: я определил приглашенных в хелпере Users: users_helper.rb:

 module UsersHelper
   def invited
     @invited = User.new(params[:user])
   end
 end

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Поскольку у вас еще нет постоянного пользователя, сделайте операцию сбора следующим образом:

  1. Изменение invite_user_path на invite_users_path в вашем контроллере
  2. Изменение member do на collection do в ваших маршрутах
1 голос
/ 12 июля 2011

invite_user_path ожидает пользователя в качестве аргумента.Попробуйте invite_user_path(invited).Вам также потребуется save пользователя, прежде чем вы сможете вычислить путь к нему.

Для эксперимента перейдите на rails console и увидите разницу между:

app.invite_user_path
app.invite_user_path(User.first)
app.invite_user_path(User.new)
...