Почему мой контроллер / действие не отвечает на: put? - PullRequest
0 голосов
/ 22 августа 2010

Я пытаюсь следовать правилам и остаюсь RESTful, но у меня возникают некоторые проблемы.

Я установил свои маршруты, поэтому я уверен, что он вызывает правильное действие, когда я запускаю rake route , это выглядит так:

PUT /admin/settings {:controller=>"admin", :action=>"save_settings"}

Так что я знаю, что мой маршрут правильный, и в моем * views / admin / settings.html.erb "есть следующее:

<% form_for(:settings, :html => { :method => :put },:builder => MyFormBuilder) do |f| %>

И все выглядит правильно (поскольку рельсы танцуют вокруг PUT):

<form action="/admin/settings" method="post">
<input name="_method" type="hidden" value="put" />

Но когда я действительно нажимаю кнопку отправки, ничего не происходит. Для тестирования я просто делаю flash :

# PUT admin/settings
def save_settings
  flash[:notice] = 'Settings Saved'
  render :action => 'settings'
end

И ничего не мигает. Я думаю, что я покрыл свои базы здесь, но я должен что-то забыть. пожалуйста, помогите RoR Noob:)

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Вам необходимо снова отобразить страницу настроек после установки вспышки, иначе страница не будет перерисована, поскольку вы не дали браузеру никакого нового контента.

«Стандартное» действие обновления restful контроллеров выглядит примерно такthis

  def update
    @device = Device.find(params[:id])
    if @device.update_attributes(params[:device])
      flash[:notice] = "Successfully updated device."
      redirect_to @device
    else
      render :action => 'edit'
    end
  end

Таким образом, вы должны либо добавить рендер к вашему методу save_settings, либо перенаправить обратно на себя.

1 голос
/ 22 августа 2010

Вы либо делаете то, что сказал Стив, или если вы непреклонны в отношении упоминания типа запроса в конструкторе форм, тогда вам следует использовать правильный синтаксис.

Попробуйте это

`<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>`

Этовзято из рельсовой документации.Первый аргумент - это имя объекта (настройки в вашем случае / имя класса модели в большинстве случаев), второй - для переменной экземпляра, в которой будут храниться данные формы (имя переменной, которую вы использовали в своем действии «edit», в URL).вы можете использовать либо помощники по URL, либо вы можете вручную указать контроллер и действие, и ваш глагол "put" войдет в хэш опций html.

Следуйте этому и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...