Problème controller

Default
,

J'ai crée un controller pour mon application ruby on Rails mais j'éprouve un problème pour la fonction create. Pouvez vous m'aidez ?
Voici les codes :

class PostsController < ApplicationController
    def index
        @posts = Post.all
    end

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

    def new
        @post = Post.new
    end
    def create
        Post.create(params[:post])      
    end
end
#page new
=form_for @post do |p|
    =p.text_field :title, :placeholder =>"title"
    %br
    =p.text_area :content, :placeholder => "content"
    %br
    =p.submit

2 Réponse

Default
,

Salut, ce qu'il serait bien serai que tu explique quel est le problème?

De ce que je vois, tu ne semble pas savoir comment créer ta fonction create. Si c'est bien de cela dont il s'agit, lit la suite. Premièrement, pour des raisons de sécurités, Rails introduit la notion de strong params afin de filtrer les données postés des formulaires. Pour reprendre ton code, il faudrait que tu fasse :

class PostsController < ApplicationController
  def create
    @post = Post.new(post_params) # Injection des strongs params
  end

  private

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

Ensuite, et en reprennant le code ci-dessus, afin de sauvegarder ton post, tout ce qu'il te reste a faire est d'invoquer la méthode save de ton model Post :

class PostsController < ApplicationController
  def create
    @post = Post.new(post_params) # Injection des strongs params
    respond_to do |format|
      if @post.save
        format.html { redirect_to @post } # Ou une URL de ton choix
      else
        format.html { render :new } # Réaffichera le formulaire avec les erreurs de validations contenu dans @post.errors
      end
    end
  end

  private

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

NOTE : Le code Ruby doit être indenter par 2 espaces et non 4. Les règles de codage, c'est important :)

Default
,

Merci beaucoup kal-el.
ça marche impeccablement bien