Я обновляю приложение до Rails 4, и я не могу на всю жизнь выяснить, что не так с этим методом. Нарушитель использует метод обновления:
def update
respond_to do |format|
if @doc.articles.find_index { |a| a.changed? }
@doc.publications.destroy_all
end
if @doc.update_attributes(params[:doc])
@doc.create_activity :update, owner: current_user
if current_user.brand.editable? && params[:editing]
format.html { redirect_to editing_url(@doc) }
else
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
end
end
end
end
Нажатие submit
генерирует эту ошибку:
ActionController::UnknownFormat in DocsController#update
и выделяет эту строку:
respond_to do |format|
Метод create отлично работает, он выглядит так:
def create
@doc = Doc.new(params[:doc])
respond_to do |format|
if @doc.save
@doc.create_activity :create, owner: current_user
if current_user.brand.editable? && params[:editing]
format.html { redirect_to doc_editing_url(@doc) }
else
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
end
else
format.html { render action: "new" }
end
end
end
Любые мысли вообще? Я полностью застрял.
О, у меня есть этот частный метод как before_action
, так что это не так:
private
def set_document
@doc = Doc.find(params[:id])
end
ИЗМЕНИТЬ
Я нашел это квази-объяснение:
В Rails 4.0 ActionController:: UnknownFormat возникает, когда действие не обрабатывает формат запроса. По умолчанию исключение обрабатывается путем ответа 406 Not Acceptable, но вы можете переопределить это сейчас. В Rails 3 всегда возвращался 406 недопустимый. нет переопределение.
что заставляет меня думать, что это связано с маршрутами, но мои маршруты должны быть по умолчанию, если я объявил их так, да?
resources :docs, :except => [:new, :show] do
get "adjust/:state" => "docs#adjust", :as => :adjust
patch "editing" => "docs#editing", :as => :editing
patch "reupdate/" => "docs#reupdate", :as => :reupdate
get "pdf" => "docs#pdf", :as => :pdf
collection { post :sort }
end
РЕДАКТИРОВАТЬ 2
Добавление JSON к контроллеру, то есть:
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
format.json { render action: 'share', status: :created, location: @doc }
дает мне ошибку метода и, кажется, перенаправляет меня обратно на страницу редактирования:
Showing .../fin/app/views/docs/_form.html.erb where line #19 raised:
undefined method `covers?' for nil:NilClass
Не знаю, что здесь происходит.