Rails form_for edit без сохранения изменений

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

Вот мой routes.rb для проекта и обратите внимание:

resources :projects do
  resources :notes
end

И это мой form_for в views / notes / edit.html.erb:

      <%= form_for [@project, @note] do |f| %>

        <div class="form-group">
          <%= f.label :title %>
          <%= f.text_field :title, class: "form-control" %>
        </div>

        <div class="form-group">
          <%= f.label :body %>
          <%= f.text_area :body, rows: 10, class: "form-control" %>
        </div>

        <div class="action">
          <%= f.submit "Save Note", class: "btn btn-success" %>
        </div>
      <% end %>

И, наконец, это мой файл notes_controller.rb:

class NotesController < ApplicationController

    before_action :find_note, only: [:show, :edit, :update, :destroy]

    def index
      @notes = Note.all
    end

    def new
      @project = Project.find(params[:project_id])
      @note = @project.notes.new
    end

    def create
      @project = Project.find(params[:project_id])
      @note = @project.notes.build(note_params)
      @note.project = @project
      @note.save ? flash[:notice] = "Note created." : flash[:error] = "Note could not be created, please try again."
      redirect_to [current_user, @project]
    end

    def show
    end

    def edit
    end

    def update
      if @note.update_attributes(note_params)
        @note.save
        flash[:notice] = "Note updated."
        redirect_to authenticated_root_path
      else
        flash[:error] = "Could not update note."
        render :edit
      end
    end

    def destroy
      @note.delete ? flash[:notice] = "Note deleted." : flash[:error] = "Note could not be deleted."
      redirect_to user_project_path
    end

    private

    def note_params
      params.require(:note).permit(:title, :body)
    end

    def find_note
      @project = Project.find(params[:project_id])
      @note = @project.notes.find(params[:id])
    end
  end

Вот что выводит мой терминал:

Started GET "/projects/12/notes/13/edit?utf8=%E2%9C%93&_method=patch&authenticity_token=vnIoOSi0ksMNI7uU0aMnBpkTBWi75wy%2BYvbs3RxO5sPIbvFzDA30%2B32dJxurdcsiu9zsIpuDCR%2FARUamBRrYmg%3D%3D&note%5Btitle%5D=Transporter+Materials&note%5Bbody%5D=Star+dust%2C+data&commit=Save+Note" for 127.0.0.1 at 2015-05-25 08:38:16 -0700
Processing by NotesController#edit as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"vnIoOSi0ksMNI7uU0aMnBpkTBWi75wy+Yvbs3RxO5sPIbvFzDA30+32dJxurdcsiu9zsIpuDCR/ARUamBRrYmg==", "note"=>{"title"=>"Transporter Materials", "body"=>"Star dust, data"}, "commit"=>"Save Note", "project_id"=>"12", "id"=>"13"}
  Project Load (0.2ms)  SELECT  "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1  [["id", 12]]
  Note Load (0.2ms)  SELECT  "notes".* FROM "notes" WHERE "notes"."project_id" = ? AND "notes"."id" = ? LIMIT 1  [["project_id", 12], ["id", 13]]
  Rendered notes/edit.html.erb within layouts/application (3.4ms)
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Completed 200 OK in 328ms (Views: 296.4ms | ActiveRecord: 2.3ms)

Спасибо заранее за любые предложения.


person Sean Mulligan    schedule 25.05.2015    source источник


Ответы (1)


Если вы используете @project.notes.build(note_params). Нет необходимости в этом @note.project = @project в действии создания

и в обновлении

если вы используете @note.update_attributes(note_params), это не требуется @note.save, и лучше попробуйте отладить его с помощью @note.update_attributes!(note_params)

он объяснит вам, почему его нельзя сохранить.

<%= form_for [@project, @note], :url => project_note_path(@project,@note), :method => :put do |f| %>

person Pardeep Dhingra    schedule 25.05.2015
comment
Хотя это и дает улучшения, но не указывает на причину проблемы. Выдается GET запрос. - person D-side; 25.05.2015
comment
Запрос на получение на стороне D был отправлен, вы правы, но для действия редактирования, а не для обновления. - person Pardeep Dhingra; 25.05.2015
comment
Да, на той же странице, на которой находится эта форма. - person D-side; 25.05.2015