所以在我的帖子控制器中,我有
def index
@post = Post.all.order('created_at DESC')
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body)
end
和我的.erb文件
<% @post.each do |post| %>
<h2 class="post_wrapper">
<h2 class="title"><%= link_to post.title, post %></h2>
<p class="date"><%= post.created_at.strftime("%B, %d, %Y")</p>
<% end %>
该链接应该是6 in / posts / 6,但我认为它不是。
编辑:这是我的routes.rb
Rails.application.routes.draw do
resources :posts
root "index#index"
end
答案 0 :(得分:2)
要访问index
路线,您不应该/posts/index
而是/posts
。
错误很可能是因为
GET /posts/index
将映射到/posts/:id
,这将调用您的posts_controller的show动作。
运行rake routes
以查看应用程序的路由映射
旁注:我不认为你的变量命名是最好的。如果您有一组对象,我认为将它们称为@posts
是有意义的,以避免混淆,同时可以调用单个实例@post
答案 1 :(得分:1)
我很抱歉错误的答案:<%= link_to post.title, post_path(post) %>
。
我检查,它的工作原理。这种用法不是问题。我怀疑你是否继续访问/posts/index
?如果是这样,请不要访问/posts
并点击该链接。如果是生成错误网址的link_to
方法,请发布它生成的html。
答案 2 :(得分:1)
您调用的网址错误,因此正在使用&#39; / posts / index&#39;。添加路径告诉操作去哪里,观察post_path(帖子)
<% @post.each do |post| %>
<h2 class="post_wrapper">
<h2 class="title"><%= link_to post.title, post_path(post) %></h2>
<p class="date"><%= post.created_at.strftime("%B, %d, %Y")</p>
<% end %>
检查这些路线以获取更多信息,您也可以发送一个用于代替ID的对象,因此post_path(post)
会将您发送到详细信息页面
HTTPVerb Path Controller#Action Named Helper
GET /posts posts#index posts_path
GET /posts/new posts#new new_post_path
POST /posts posts#create posts_path
GET /posts/:id posts#show post_path(:id)
GET /posts/:id/edit posts#edit edit_post_path(:id)
PATCH/PUT /posts/:id posts#update post_path(:id)
DELETE /posts/:id posts#destroy post_path(:id)