Ein Wort, das Herrn Mentor beeindruckt hat ~ Es gibt einen Pegelunterschied, um Rails schreiben zu können. ~ ~ RSpec ist eine unverzichtbare Technologie. ~
example.html.haml
<div class="haml">
<h1>Hello Haml!</h1>
</div>
.haml
%h1 Hello Haml!
routes.rb
#Post ist das Elternteil und Comment and Like sind die Kinder.
resources :posts do
resources :comments, only: [:create, :destroy]
resources :likes, only: [:show,:create, :destroy]
end
Außerdem können Sie zwei IDs von der URL mitbringen! ↓
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
#Es ist schwer zu verstehen, also machen wir es noch mehr
Machen Sie die häufig verwendete Logik zu einer Modellmethode und machen Sie sie TROCKEN ↓ p>
example.html.haml
- - if current_user.id == post.user_id #Ich hatte ein schlechtes Gesicht, als ich es direkt schrieb
+ - post.created_user?(current_user)
%p Sie sind die Person, die gepostet hat
post.rb
#Modellmethode definieren
def created_user?(user)
self.user_id == user.id
end
Das Aufrufen einer Methode direkt aus dem Modell in der Steuerung kann leicht zu einer Sicherheitslücke führen. Grundsätzlich ist das gesamte Ziel unregelmäßig und fast nicht vorhanden. ↓ p>
example_controller.rb
def new
- @post = Post.new #Möglicherweise wurde eine falsche ID eingegeben
+ @post = current_user.posts.build #current_Benutzerbereich(Umfang)
end
#Wenn Sie das Kapitalmodell wirklich verwenden möchten, müssen Sie es tun oder Ihre Hand auf Ihre Brust legen, bevor Sie sich entscheiden.
Machen Sie den gemeinsamen Teil im Controller zu einer privaten Methode und halten Sie ihn mit before_action ↓ p> in DRY
example_controller.rb
before_action :set_post
#Kürzung
private
def set_post
@post = current_user.posts.find(params[:id])
end
#Machen Sie den Controller nicht fett, machen wir ihn schlank
Zum Speichern und Zerstören von Methoden, die fast nie fehlschlagen, außer bei Faktoren wie Serverproblemen in der Internetumgebung! ↓ p>
example_controller.rb
def destroy
@post.destroy!
flash[:notice] = "Beitrag gelöscht"
redirect_to posts_path
end
Machen Sie es zu einer Konstante, damit es für die ganze Person leicht zu verstehen ist. Definieren Sie eine Konstante im Modell und rufen Sie sie in der Steuerung auf. ↓ 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)
#Modellname::Konstanter Name
Schreiben Sie ursprünglich einen Test und eine Methode, während Sie nach Fehlern suchen (TDD, testgetriebene Entwicklung) p>
post_spec.rb
describe "#created_user?" do
let(:user) { FactoryBot.create(:user) } #Die Person
let(:other_user) { FactoryBot.create(:user) } #Andere
let(:post) { FactoryBot.create(:post, user: user) } #Gepostet von der Person
context "Für denselben Benutzer wie der angemeldete Benutzer" do
it "Rückgabe true" do
expect(post.created_user?(user)).to eq true
end
end
context "Wenn nicht derselbe Benutzer wie der angemeldete Benutzer" do
it "Falsche Rückgabe" do
expect(post.created_user?(other_user)).to eq false
end
end
end
Recommended Posts