Mes utilisateurs sont configurés via Devise. Je peux également utiliser CanCanCan.
J'ai mis en place un modèle d'articles et tout utilisateur peut créer des articles. Ils peuvent uniquement supprimer et modifier leurs propres créations d'articles. Sur l'index, ils peuvent voir tous les articles qui ont été créés par tous les utilisateurs. Il existe actuellement une option permettant de visualiser, de modifier et de supprimer. Je souhaite que cette option ne soit visible que pour les articles appartenant à l'utilisateur. Je veux que toutes les autres lignes d'article soient vides. (Sauf pour l'administrateur bien sûr). Les utilisateurs peuvent voir les articles sur views/articles/index.html.erb
<table>
<tr>
<th>Title</th>
<th>Description</th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.description %></td>
<td><%= link_to 'View', article_path(article) %></td>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Delete', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
Comment puis-je permettre aux utilisateurs de ne voir les boutons Modifier et Supprimer que sur les articles dont ils sont propriétaires ?
J'ai essayé mais ça ne marche pas :
<table>
<tr>
<th>Title</th>
<th>Description</th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.description %></td>
<td><%= link_to 'View', article_path(article) %></td>
<% if user_signed_in? && current_user.articles.exists?(@article.id) %>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Delete', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
<% end %>
</tr>
<% end %>
</table>
J'ai aussi essayé :
<% if current_user && current_user.articles.exists?(@article.id) %>
Voici à quoi ressemble le contrôleur de mes articles : (Je sais que je dois l'améliorer).
def create
@article = current_user.articles.build(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
def update
@article = Article.find(params[:id])
if user_signed_in? && current_user.articles.exists?(@article.id)
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
elsif current_user && current_user.admin_role?
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
else
redirect_to @article
end
end
def destroy
@article = Article.find(params[:id])
if user_signed_in? && current_user.articles.exists?(@article.id)
@article.destroy
redirect_to articles_path
elsif current_user && current_user.admin_role?
@article.destroy
redirect_to articles_path
else
redirect_to articles_path
end
end