Как я могу использовать метод действия, такие как действия «обновить», «создать» или «уничтожить» (из скаффолда)? - PullRequest
0 голосов
/ 19 декабря 2010

Я сделал эти изменения соответственно:

Теперь в 'app / controllers / users_controller.rb ' У меня есть этот код:

def reset
    respond_to do |format|
        format.html # reset.html.erb
    end
end

def send_reset
    respond_to do |format|
        if @user.errors.empty?
            ...
        else
            format.html { render :action => 'reset' }
        end
    end
end

Теперь в 'config / rout.rb' у меня есть этот код:

  resources :users do
    collection do
      get 'reset'
      post 'reset'
      get 'send_reset'
      post 'send_reset'
    end
  end

Если я отправлю форму ('app / views / users / reset.html.erb'), относящуюся к изменяется

<%= form_tag( send_reset_users_path, :method => :post ) do %>
    <%= text_field_tag :email %>
    <%= submit_tag("Send") %>
<% end %> 

URL браузера становится ' ... / users / send_reset ', но я хочу ' ... / users / reset '(Я думаю, что проблема заключается в коде 'format.html {render: action =>' reset '}', который неправильно отображает действие) или, возможно, в маршруте.

В несколькихслова, которые я намерен использовать для действия «send_reset», как я использую, например, действия «обновить», «создать» или «уничтожить» (из скаффолда), в моем случае без создания «app / views / users /»send_reset.html.erb ', но просто вызывая метод действия для решения моей проблемы. Как я могу это сделать?

1 Ответ

1 голос
/ 19 декабря 2010

Схема URL-адресов Rails по умолчанию:

:host/:controller/:action/:id

Переименуйте действие вашего контроллера с

def send_reset
end

на

def reset
end

и переименуйте представления и маршруты для соответствияэто изменение.

Однако вы уже используете сброс для get и send_reset для Post, но вы хотите, чтобы они были одинаковыми, просто делайте разные вещи, если вы запрашиваете страницу или отправляете форму POST.

def reset
   case request.method
   when :post
       # send them an email
       # redirect_to :somewhere_else
   else # :get, :put, :delete
       # render the view with the recovery form
   end
end
...