2015-05-25 6 views
0

Я новичок в рельсах и не могу получить свою форму редактирования для обновления атрибутов.Rails form_for edit Не сохранять изменения

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

И это мой form_for в Views/заметок/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) 

Заранее благодарим за любые предложения.

ответ

0

Если вы используете @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| %>

+0

Хотя это действительно обеспечивает улучшение, оно не дает причину проблемы. Выдается запрос 'GET'. –

+0

@ D-side получить запрос был выдан правильно, но для действия редактирования не для обновления. –

+0

Да, к той же странице эта форма включена. –