Progatez Ruby on Rails

Progression des impressions du parcours Ruby on Rails

J'ai passé environ 200 heures à apprendre la programmation et à suivre un cours Rails. Bien que l'apprentissage se soit déroulé sans heurts jusqu'à présent, cette fois, ce fut difficile. Je ne comprends pas parfaitement le contenu du cours Dojo 4. Conservez une trace sous forme de mémo afin de pouvoir l'examiner.


Fichier de migration lié

Qu'est-ce qu'un fichier de migration: un dessin de conception lors de la création d'une base de données. Qu'est-ce qu'un modèle: une classe spéciale pour manipuler les tables    Créer un modèle

rails g model Post content:text 

rails g modèle Nom du modèle Nom de la colonne: Type de données

rails g migration add_image_name

Obtenez de la valeur à partir de l'URL

Spécifiez le hachage dans le routage.

routes.rb


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

Peut être obtenu en utilisant params [hash]

controller.rb


def show
  @id = params[:id]
end

Paramètres de destination de soumission de formulaire

erb:posts/new.html.erb


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

N'oubliez pas de faire

Méthode de description du lien au moment de la publication

Spécifiez la méthode post comme troisième argument.

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

Branchement en cours d'enregistrement dans la base de données

Notez que le processus de sauvegarde est exécuté dans la partie if ~~~ (Pas seulement renvoyer une valeur booléenne)

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

Afficher directement dans la vue sans passer par la base de données (rendu)

Spécifier le rendu (nom du contrôleur / nom de la vue)

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

Champ de transmission d'image

N'oubliez pas de spécifier le type

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

Formulaire de soumission d'images

Spécifiez {multipart: true}

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

Processus de sauvegarde de l'image transmise

Pour les paramètres reçus [: image], utilisez la méthode read pour obtenir le contenu des données d'image. File.binwrite ("emplacement du fichier", "contenu du fichier")

  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

Paramètres de session

Utilisez une variable spéciale appelée session pour conserver les informations utilisateur même lorsque la page est déplacée. La valeur attribuée à la session est enregistrée dans le navigateur.

session[:user_id] = @user.id

Définition des variables communes

application.html.erb est appelé à partir de toutes les actions. Par conséquent, il est efficace de définir des variables à utiliser dans toutes les actions. before_action: en définissant le nom de l'action, le "nom de l'action" est exécuté avant l'appel de l'action.

application.rb


before_action :set_current_user

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

Post table </ font> user_id </ font> Obtenir des informations utilisateur qui existent dans une autre table

Définir des actions pour la table (Post model dans ce cas) où existent les données à utiliser

post.rb


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

Exemple d'utilisation (Obtenir des utilisateurs associés aux publications des publications)

posts_controller.rb


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

Obtenir des informations sur la publication qui existent dans une autre table à partir de l'ID </ font> donné à la table des utilisateurs </ font>

Définir une action pour la table (modèle utilisateur dans ce cas) où existent les données à utiliser

user.rb


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

Exemple d'utilisation (obtenir tous les messages qui lui sont associés de l'utilisateur et l'afficher)

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 des articles que chaque utilisateur a aimé

Spécifier le routage

routes.rb


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

Définition de l'action

rb:users.controller.rb


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

Notation en vue

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%>

N'oubliez pas d'obtenir le message correspondant en utilisant pots_id dans le tableau Like de la deuxième ligne.


Recommended Posts