我正在编写一个rails应用程序,我想在/users/20/posts
这样的单独页面中显示用户的帖子。
我将这两个代码添加到routs.rb:
resources :users do
resources :posts, only: [:index]
end
和
get 'users/:id/posts' => 'users#posts', :as => :user_posts
但是像/users/20/posts
这样的网址会显示所有帖子,而不仅仅是这个特定用户的帖子。 (它的行为与/posts
)
我的模型和控制器中有这些(如果需要):
user.rb:
has_many :posts, dependent: :destroy
post.rb:
belongs_to :user
users_controller.rb:
def posts
@user = User.find(params[:id])
@posts = @user.posts
end
答案 0 :(得分:2)
仅使用浏览器URL进行测试。它应该工作。
在 routes.rb
中resources :users do
resources :posts, only: [:index]
end
get 'users/:id/user_posts' => 'users#user_posts', :as => :custom_user_posts
在 users_controller.rb
中def user_posts
@user = User.find(params[:user_id])
@posts = @user.posts
#render plain: {posts: @posts.inspect, user: @user.inspect}
end
现在在view / users / user_posts.html.erb
中添加新文件在页面中:
<% @posts.each do |p|%>
loop right here your data
<% end %>
答案 1 :(得分:0)
按照您的方式进行,您需要将路线更改为
resources :users do
get :posts
end
答案 2 :(得分:0)
在index
操作中,添加此
def index
user = User.find_by_id(params[:user_id])
@posts = user.posts
end
然后在您的观看中显示@posts
。