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.
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
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
erb:posts/new.html.erb
<%= form_tag("/posts/create") do%>
<% end %>
N'oubliez pas de faire
Spécifiez la méthode post comme troisième argument.
<%= link_to("effacer","/posts/#{@post.id}/destroy",{method: "post"})%>
<% end %>
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
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
N'oubliez pas de spécifier le type
<input name="image" type="file">
Spécifiez {multipart: true}
<%= form_tag("~~~",{multipart: true}) do%>
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
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
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
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
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%>
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