Действие обновления контроллера Rails 3 работает локально, но не на heroku, отсутствует шаблон ошибки - PullRequest
1 голос
/ 18 января 2012

Я испытываю проблему, аналогичную предыдущему ТАК вопрос , но ответ мне не подходит. Поэтому я хотел бы продолжить свою проблему.

У меня есть действие в контроллере, которое обновляет мою модель профиля с помощью флажка. Когда я нажимаю флажок, когда приложение работает локально, у меня нет проблем. Однако при развертывании в Heroku я получаю:

ActionView::MissingTemplate (Missing template profiles/show_hometown_settings with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/app/app/views", "/app/vendor/plugins/rails_log_stdout/app/views", "/app/vendor/plugins/rails3_serve_static_assets/app/views", "/app/vendor/plugins/paperclip/app/views"):

Я добавил и файл _show_hometown_settings.html.erb, и файл _show_hometown_settings.js.erb, но ни один из них не помог. Проверка моего флажка дала мне ванильный код на моем экране и вышеупомянутую ошибку.

Если я добавлю show_hometown_settings.html.erb, я больше не получу ванильный код. Я вижу шаблон show_hometown_settings.html.erb, но все равно получаю сообщение об ошибке, и я не перенаправляюсь на мой settings_path, что является целым пунктом (проверьте, чтобы обновить, опубликовать в db, перенаправить, чтобы внести дальнейшие изменения настроек). Кто-нибудь может мне помочь с этим?

Вот действие контроллера:

def show_hometown_settings
  @profile = current_user.profile
  if @profile.show_hometown == true
    if @profile.update_attributes(:show_hometown => false)
      redirect_to settings_path
    else
      redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
    end
  elsif @profile.show_hometown == false
    if @profile.update_attributes(:show_hometown => true)
      redirect_to settings_path
    else
    redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
    end
  end
end

Вот форма, которую я использую для действия:

<%= form_tag({:action => "show_hometown_settings", :controller => "profiles"}, :html => {:multipart => true }) do %>
  <%= check_box_tag(:show_hometown, 1, @user.profile.show_hometown ? true : false) %>
  <%= @user.profile.hometown %>
<% end %>

ОБНОВЛЕНИЕ: Вот часть моего routes.rb файла, который ссылается на действие:

match "profiles/show_hometown_settings", :to => "profiles#show_hometown_settings"

ОБНОВЛЕНИЕ 2: После вопроса ниже я получил другую ошибку, и мои журналы показывают проблему маршрута:

Возвращает

`The page you were looking for doesn't exist (404)`

А по моему heroku logs --tail вижу

2012-01-19T23:13:47+00:00 app[web.1]: Started POST "/profiles/show_hometown_settings" for 98.218.231.113 at 2012-01-19 23:13:47 +0000
2012-01-19T23:13:47+00:00 app[web.1]: 
2012-01-19T23:13:47+00:00 app[web.1]: ActionController::RoutingError (No route matches "/profiles/show_hometown_settings"):

Если я изменю маршрут с: via => [: put] на: via => [: post], это сработает. Надеюсь, все в порядке.

1 Ответ

1 голос
/ 19 января 2012

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

Вероятно, происходит то, что ваша логика if-elsif выходит из строя, и код никогда не достигает этих перенаправлений (поскольку ни один из блоков if не оценивается как true). Если Rails не получает вызов redirect_to, то по умолчанию он отображает представление для действия контроллера (что он и пытается сделать).

Я бы изменил это примерно так:

Маршрут:

match "profiles/show_hometown_settings", :to => "profiles#show_hometown_settings", :as => :show_hometown_settings, :via => [:put]

Контроллер:

def show_hometown_settings
  if current_user.profile.update_attributes(:show_hometown => params[:show_hometown])
    redirect_to settings_path
  else
    redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
  end
end

Форма:

<%= form_tag(show_hometown_settings_path, :method => :put) do %>
  <%= check_box_tag(:show_hometown, 1, @user.profile.show_hometown ? true : false) %>
  <%= @user.profile.hometown %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...