Progate Ruby on Rails5 Rückblick

Progate Ruby on Rails Kursimpressionen

Ich habe ungefähr 200 Stunden lang Programmieren gelernt und einen Rails-Kurs begonnen. Obwohl das Lernen bisher reibungslos verlaufen ist, war es diesmal schwierig. Ich verstehe den Inhalt von Dojo-Kurs 4 nicht vollständig. Bewahren Sie eine Aufzeichnung als Memo auf, damit Sie sie überprüfen können.


Migrationsdatei bezogen

Was ist eine Migrationsdatei? Eine Konstruktionszeichnung beim Erstellen einer Datenbank. Was ist ein Modell: Eine spezielle Klasse zum Bearbeiten von Tabellen    Modell erstellen

rails g model Post content:text 

Schienen g Modell Modellname Spaltenname: Datentyp

rails g migration add_image_name

Wert von URL abrufen

Geben Sie den Hash im Routing an.

routes.rb


get "posts/:id" => "posts#show"

Kann mit params [hash] erhalten werden

controller.rb


def show
  @id = params[:id]
end

Einstellungen für das Formularübermittlungsziel

erb:posts/new.html.erb


<%= form_tag("/posts/create") do%>
<% end %>

Vergiss nicht zu tun

Linkbeschreibungsmethode zum Zeitpunkt der Veröffentlichung

Geben Sie den Methodenbeitrag als drittes Argument an.

<%= link_to("löschen","/posts/#{@post.id}/destroy",{method: "post"})%>
<% end %>

Verzweigung beim Speichern in der Datenbank

Beachten Sie, dass der Speichervorgang im Teil if ~~~ ausgeführt wird (Nicht nur einen booleschen Wert zurückgeben)

def update
  @post = Post.find_by(id: params[:id])
  if @post.save
    redirect_to("/posts/index")
  else
    redirect_to("/posts/#{@post.id}/edit")
  end
end

Direkt in der Ansicht anzeigen, ohne die Datenbank zu durchlaufen (Rendern)

Geben Sie das Rendering an (Controller-Name / Ansichtsname).

def update
  @post = Post.find_by(id: params[:id])
  if @post.save
    redirect_to("/posts/index")
  else
    render("posts/edit")
  end
end

Bildübertragungsfeld

Vergessen Sie nicht, den Typ anzugeben

<input name="image" type="file">

Bildübermittlungsformular

Geben Sie {multipart: true} an

<%= form_tag("~~~",{multipart: true}) do%>

Speichervorgang des übertragenen Bildes

Verwenden Sie für die empfangenen Parameter [: image] die Lesemethode, um den Inhalt der Bilddaten abzurufen. File.binwrite ("Dateispeicherort", "Dateiinhalt")

  def update
    @user = User.find_by(id: params[:id])
    @user.name = params[:name]
    @user.email = params[:email]
    @user.image_name = "#{@user.id}.jpg "
    image = params[:image]

    if params[:image]
      File.binwrite("public/user_images/#{@user.image_name}",image.read)
    end
  end

Sitzungseinstellungen

Verwenden Sie eine spezielle Variable namens session, um Benutzerinformationen auch dann zu speichern, wenn die Seite verschoben wird. Der der Sitzung zugewiesene Wert wird im Browser gespeichert.

session[:user_id] = @user.id

Definition gemeinsamer Variablen

application.html.erb wird von allen Aktionen aufgerufen. Daher ist es effizient, Variablen zu definieren, die in allen Aktionen verwendet werden sollen. Durch Setzen von before_action: Aktionsname wird der "Aktionsname" ausgeführt, bevor die Aktion aufgerufen wird.

application.rb


before_action :set_current_user

def set_current_user
  @current_user = User.find_by(id: sessino[:user_id])
end

Tabelle veröffentlichen </ font> user_id </ font> Benutzerinformationen abrufen, die in einer anderen Tabelle vorhanden sind

Definieren Sie Aktionen für die Tabelle (in diesem Fall Post-Modell), in der die zu verwendenden Daten vorhanden sind

post.rb


def user
  return User.find_by(id: self.user_id)
end

Verwendungsbeispiel (Benutzer mit Posts aus Posts verknüpfen)

posts_controller.rb


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

Abrufen von Post-Informationen, die in einer anderen Tabelle vorhanden sind, von der ID </ font>, die der Benutzertabelle </ font> zugewiesen wurde

Definieren Sie eine Aktion für die Tabelle (in diesem Fall Benutzermodell), in der die zu verwendenden Daten vorhanden sind

user.rb


def posts
  return Post.where(user_id: self.id)
end

Verwendungsbeispiel (Alle damit verbundenen Beiträge vom Benutzer abrufen und anzeigen)

erb:show.html.erb


<% @user.posts.each do |post|%>
  <img src="<%= "/user_images/#{post.user.image_name}" %>">
  <%= link_to(post.user.name, "/users/#{post.user.id}") %>
  <%= link_to(post.content, "/posts/#{post.id}") %>
<% end%>

Liste der Beiträge, die jedem Benutzer gefallen haben

Routing festlegen

routes.rb


get "users/:id/likes" => "users#likes"

Aktionsdefinition

rb:users.controller.rb


def likes
  @user = User.find_by(id: params[:id])
  @likes = Like.where(user_id: @user.id)
end

Notation im Blick

erb:likes.html.erb


<% @likes.each do |like|%>
  <% post = Post.find_by(id: like.post_id)%>
  <img src="<%= "/user_images/#{post.user.image_name}" %>">
  <%= link_to(post.user.name, "/users/#{post.user.id}") %>
  <%= link_to(post.content, "/posts/#{post.id}") %>
<% end%>

Vergessen Sie nicht, die pots_id in der Like-Tabelle in der zweiten Zeile zu verwenden, um den entsprechenden Beitrag zu erhalten.


Recommended Posts