2017-05-04 2 views
0

Ich mache eine blogähnliche Anwendung und arbeite an der Aktualisierung von Beiträgen bei der Bearbeitung.Nicht in der Lage, Beiträge in Ruby on Rails zu aktualisieren

Ich benutze einen Teil genannt _post_form Beiträge zu bearbeiten:

<%= form_for(@post) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 
<div class="field"> 
<%= f.text_area :content, placeholder: "Compose new post..." %> 
</div> 
<div id="post_button"> 
<%= f.submit "Post", class: "btn btn-primary" %> 
</div> 
<% end %> 

Relevante Code aus meiner Beiträge Controller:

class PostsController < ApplicationController 
before_action :find_note, only: [:show, :edit, :update] 

def update 
    redirect_to @post 
end 

def find_note 
    @post = Post.find(params[:id]) 
end 

Als ich die "Post" Button klicken, mich auf die richtige umleitet Post aber es wird es tatsächlich nicht mit dem neuen Text aktualisieren, den ich in das Formular eingebe. Ich habe das Gefühl, dass etwas Grundlegendes fehlt, aber ich bin mir nicht sicher, was es ist.

Jede Hilfe wird geschätzt!

Antwort

1

Sie aktualisieren nichts in Ihrem Controller, Sie leiten nur den Benutzer zur post Ansicht um.

Zuerst sollten Sie die neuen Werte von post:

def post_params 
    params.require(:post).permit(:content) 
    end 

Und dann aktualisieren, bevor Umleiten:

def update 
    @post.update(post_params) 
    redirect_to @post 
end 

setzen sie alle zusammen, sollte Ihr Controller wie folgt aussehen:

class PostsController < ApplicationController 
    before_action :find_note, only: [:show, :edit, :update] 

    def update 
    @post.update(post_params) 
    redirect_to @post 
    end 

    private 

    def post_params 
    params.require(:post).permit(:content) 
    end 

    def find_note 
    @post = Post.find(params[:id]) 
    end 
end 
+0

Danke für diese tolle Antwort, ich verstehe es jetzt viel besser! – Andrew

1

Sie vermissen Modell update Anruf in PostsController#update Aktion weshalb Ihr Post-Eintrag wird nicht aktualisiert. Aktualisieren Sie den Beitrag Aufzeichnung vor in PostsController#update Aktion Umleiten

def update 
    @post.update(post_params) ## <- add this 
    redirect_to @post 
end 

HINWEIS: vorausgesetzt, Sie verwenden Rails-Version> = 4 und Whitelisting Attribute (starke Parameter) in post_params.