Uaktualniam aplikację do Rails 4 i nie mogę do końca życia dowiedzieć się, co jest nie tak z tą metodą. Sprawca jest metoda aktualizacji:Szyny 4: co jest nie tak z tą metodą?
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
Kliknięcie submit
generuje ten błąd:
ActionController::UnknownFormat in DocsController#update
i podkreśla ten wiersz:
respond_to do |format|
Sposób tworzenia działa dobrze, wygląda to tak:
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
Jakieś myśli? Całkowicie utknąłem.
Och, mam tę prywatną metodę jako before_action
też, więc to nie jest takie:
private
def set_document
@doc = Doc.find(params[:id])
end
EDIT
znalazłem ten quasi-wyjaśnienie:
In Rails 4.0, ActionController::UnknownFormat is raised when the action doesn't handle the request format. By default, the exception is handled by responding with 406 Not Acceptable, but you can override that now. In Rails 3, 406 Not Acceptable was always returned. No overrides.
co powoduje, że myślę, że ma to coś wspólnego z trasami, ale moje trasy powinny być domyślne, jeśli je zadeklarowałem, tak?
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
EDIT 2
Dodanie JSON do kontrolera, czyli:
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
format.json { render action: 'share', status: :created, location: @doc }
daje mi błąd żadna metoda i wydaje się przekierować mnie do strony edycji:
Showing .../fin/app/views/docs/_form.html.erb where line #19 raised:
undefined method `covers?' for nil:NilClass
Naprawdę nie mam pojęcia, co tu się dzieje.
czy masz 'remote: true' w formularzu? jest wysyłany za pośrednictwem JS? czy masz 'response_to: json' w twoim kontrolerze? – phoet
Nie ma w formularzu 'remote: true' i nie jest on wysyłany przez JS. W moim kontrolerze nie ma 'response_to: json', ponieważ o ile wiem, nie potrzebuję tego. –