Я обновляю приложение до 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 Not Acceptable. Никаких переопределений.
что заставляет меня думать, что это как-то связано с маршрутами, но мои маршруты должны быть по умолчанию, если я объявил их так, да?
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
На самом деле понятия не имею, что здесь происходит.
remote: true
в вашей форме? он отправляется через JS? у вас естьrespond_to :json
в вашем контроллере? - person phoet   schedule 14.06.2013remote: true
, и она не отправляется через JS. В моем контроллере нетrespond_to :json
, потому что, насколько я знаю, он мне не нужен. - person okay56k   schedule 14.06.2013