所以我正在构建一个应用程序,我有一个由设计管理的用户模型,一个帖子模型,帖子belongs_to用户和用户has_many帖子,现在我有一个页面,我显示所有帖子
<% @posts.each do |post| %>
<div id="post">
<%= post.user.name%>
<%= post.course_name %>
<%= post.course_number %>
<%= image_tag post.user.image_string %>
<% if post.user == current_user%>
<%= link_to "Edit", edit_post_path(post) %>
<%= link_to "Delete", post_path(post), method: :DELETE, data: { confirm: 'Are you sure?' } %>
<% end %>
</div>
<% end%>
<%= link_to "profile", '/posts/profile' %>
我想要点击上面用户的图片,它应该带我到他的个人资料。我想到了以下几点: 创建一个动作:
def show_profile
end
然后在show_profile.html.erb
我会说:
<%=@post.user.name %>
在我的路线中我会补充:
get '/posts/show_profile'
然后我会添加<%=link_to image_tag post.user.image_string, posts_show_profile_path(post) %>
这会有用吗?这是我能做的最好的事情吗?
谢谢
答案 0 :(得分:1)
你可以做这样的事情
<%= link_to current_user do%>
<%= image_tag post.user.image_string %>
<% end %>
这将引导您进入用户的展示页面,您可以在其中显示用户的个人资料。
如果您想为其他用户显示它,您可以为其定义路线,如
get "profile/:id" => "users#show", :as => 'profile'
<%= link_to profile_path(@user.id) do%>
<%= image_tag post.user.image_string %>
<% end %>
在UsersController中,将show动作定义为
#users_controller.rb
def show
@user = User.find(params[:id])
end
答案 1 :(得分:1)
您的代码将完美运行您只需修改'show_profile'操作,就像这样 -
def show_profile
@post = Post.find(params[:id])
end
这样你就可以在show_profile.html.erb
上获得@post对象来显示 -
<%=@post.user.name %>
或者,您可以传递用户对象来代替@post
以显示用户个人资料 -
def show_profile
@post = Post.find(params[:id])
@user = @post.user
end
并在show_profile.html.erb
-
<%=@user.name %>