Un mot qui a marqué M. Mentor ~ Il y a une différence de niveau pour pouvoir écrire des Rails. ~ ~ RSpec est une technologie indispensable. ~
example.html.haml
<div class="haml">
  <h1>Hello Haml!</h1>
</div>
.haml
  %h1 Hello Haml!
 routes.rb
#Post est le parent, et Comment et Like sont les enfants.
  resources :posts do
    resources :comments, only: [:create, :destroy]
    resources :likes, only: [:show,:create, :destroy]
  end
De plus, vous pouvez apporter deux identifiants à partir de l'URL! ↓
post_comments POST     /posts/:post_id/comments(.:format)      comments#create
post_comment  DELETE   /posts/:post_id/comments/:id(.:format)  comments#destroy
post_likes    POST     /posts/:post_id/likes(.:format)         likes#create
post_like     GET      /posts/:post_id/likes/:id(.:format)     likes#show
              DELETE   /posts/:post_id/likes/:id(.:format)     likes#destroy
#C'est difficile à comprendre, alors faisons-le encore plus
 Faire de la logique utilisée plusieurs fois une méthode modèle, la rendre sèche ↓ p>
example.html.haml
-  - if current_user.id == post.user_id #J'avais un mauvais visage quand je l'ai écrit directement
+  - post.created_user?(current_user) 
    %p vous êtes la personne qui a publié
post.rb
#Définir la méthode du modèle
  def created_user?(user)
    self.user_id == user.id
  end
 L'appel d'une méthode directement à partir du modèle dans le contrôleur peut facilement conduire à une faille de sécurité. Fondamentalement, l'ensemble de la cible est irrégulier, et il est presque inexistant. ↓ p>
example_controller.rb
def new
  - @post = Post.new  #Un mauvais identifiant peut être entré
  + @post = current_user.posts.build  #current_gamme d'utilisateurs(portée)
end 
#Si vous voulez vraiment utiliser le modèle du capital, vous devez le faire ou mettre votre main sur votre poitrine avant de vous décider.
Faites de la partie commune du contrôleur une méthode privée et conservez-la dans DRY avec before_action ↓ p>
example_controller.rb
before_action :set_post
#réduction
private
def set_post
  @post = current_user.posts.find(params[:id])
end
#Ne grossissez pas le contrôleur, faisons-le mince
 Pour des méthodes de sauvegarde et de destruction qui n'échouent presque jamais, à l'exception de facteurs tels que des problèmes de serveur dans l'environnement Internet! ↓ p>
example_controller.rb
  def destroy
    @post.destroy!
    flash[:notice] = "Message supprimé"
    redirect_to posts_path
  end
 Faites-en une constante pour qu'elle soit facile à comprendre pour toute la personne. Définissez une constante dans le modèle et appelez-la dans le contrôleur. ↓ p>
example_controller.rb
#ex_model.rb
PER_COMMENT = 5
#example_controller.rb
@comments = @post.comments.page(params[:page]).per(Ex_model::PER_COMMENT).order(created_at: :desc)
#Nom du modèle::Nom constant
À l'origine, écrire un test et écrire une méthode tout en vérifiant les échecs (TDD, développement piloté par les tests) p>
post_spec.rb
  describe "#created_user?" do
    let(:user) { FactoryBot.create(:user) } #La personne
    let(:other_user) { FactoryBot.create(:user) } #autres
    let(:post) { FactoryBot.create(:post, user: user) } #Publié par la personne
  
    context "Pour le même utilisateur que l'utilisateur connecté" do
      it "Revenir vrai" do
        expect(post.created_user?(user)).to eq true 
      end
    end
    context "Si ce n'est pas le même utilisateur que l'utilisateur connecté" do
      it "Retour faux" do
        expect(post.created_user?(other_user)).to eq false 
      end
    end 
  end
 Recommended Posts