Salut.
J’ai un peu honte de poster pour ça mais bon ; je me suis lancé récemment sur Ruby on Rails et je cale depuis ce matin sur un petit problème sur lequel je ne pensais sincèrement pas bloquer : je souhaite réaliser un blog « classique » comprenant des articles. Chaque article peut être commenté. Il y a donc un formulaire permettant de poster un commentaire (dont les champs sont Nom, Email, Site, Message) et c’est justement sur ce formulaire que je sèche totalement. Enfin, disons plutôt que j’aimerais faire les choses « proprement » en utilisant ce que Rails propose plutôt que de « setter » tout à la main et je suis tombé notamment sur les « strong parameters », qui d’après ce que j’ai compris, permettent de « cadrer » ce que l’utilisateur entrera comme champs et comme données.
En théorie ça a l’air super, en pratique je me casse les dents dessus et malheureusement la doc ne m’aide pas trop… :/
Mes commentaires se composent donc d’un auteur, qui est une simple chaîne de caractère, d’une date, d’une adresse mail, d’un lien vers un site web, d’un message et sont bien entendu lié à un article. Je précise aussi que j’aimerais si possible que les champs « Auteur », « Email » et « Message » doivent être obligatoirement remplis.
Voici quelques morceaux de mon code.
blog_controller.rb
1 2 3 4 5 6 7 8 9 10 11 | class BlogController < ApplicationController helper ApplicationHelper def index @articles = Article.select('id, title, slug, date, image, summary').order('date DESC').paginate(:page => params[:page], :per_page => 5) end def article @article = Article.find(params[:id]) end end |
comments_controller.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class CommentsController < ApplicationController def new @comment = Comment.new end def create @comment = Comment.new(comment_params) @comment.article_id = params[:id] if @comment.save # redirection vers l'article else # erreur end end private def comment_params params.require(:comment).permit(:author, :email, :website, :message) end end |
1 2 3 | class Comment < ApplicationRecord belongs_to :article end |
article.rb
1 2 3 4 5 6 | class Article < ApplicationRecord self.table_name = "articles" belongs_to :category belongs_to :user, :foreign_key => "author_id" has_many :comments end |
Bref, de manière générale je voudrais savoir s’il y a une manière « propre » de gérer les formulaires (et notamment quand il y a une relation avec un parent) avec Rails ou s’il faut y aller à coup de Object.attribute = params[:form_attribute]
NB : Ma version de Rails est la 5.0.1
Merci d’avance.