Ruby 在 Rails - 找不到 Post 和 'id'=string
Ruby on Rails - Couldn't find Post with 'id'=string
在传递字符串而不是 ID 作为参数时遇到问题。我一直受到 "Couldn't find Post with 'id'=stack" 的打击。
routes.rb 对重定向控制器中的 :short_url 发出 GET 请求。
get '/:short_url' => 'posts#redirect'
resources :posts
post_controller.rb 正在寻找 post 中的参数 [:short_url]。
def redirect
@post = Post.find(params[:short_url])
redirect_to @post.(params[:url])
end
视图只是一个带有@post.each do |post| 的锚标记循环。
<a class="item" target="_blank" href="<%= post.short_url %">
<div>Short URL</div>
<%= post.short_url %>
</a>
不确定我是否错误地调用了路由或控制器级别的参数。
find
方法根据id
(整数)查找记录。如果你想根据任何其他字段(在你的例子中,short_url
)查找 table,你需要使用 find_by
方法。
您收到错误 Couldn't find Post with 'id'=stack
,因为 ActiveRecord
在 posts
table 中查找 stack
的 id
不存在。尝试
@post = Post.find_by(short_url: params[:short_url])
redirect_to @post
在传递字符串而不是 ID 作为参数时遇到问题。我一直受到 "Couldn't find Post with 'id'=stack" 的打击。
routes.rb 对重定向控制器中的 :short_url 发出 GET 请求。
get '/:short_url' => 'posts#redirect'
resources :posts
post_controller.rb 正在寻找 post 中的参数 [:short_url]。
def redirect
@post = Post.find(params[:short_url])
redirect_to @post.(params[:url])
end
视图只是一个带有@post.each do |post| 的锚标记循环。
<a class="item" target="_blank" href="<%= post.short_url %">
<div>Short URL</div>
<%= post.short_url %>
</a>
不确定我是否错误地调用了路由或控制器级别的参数。
find
方法根据id
(整数)查找记录。如果你想根据任何其他字段(在你的例子中,short_url
)查找 table,你需要使用 find_by
方法。
您收到错误 Couldn't find Post with 'id'=stack
,因为 ActiveRecord
在 posts
table 中查找 stack
的 id
不存在。尝试
@post = Post.find_by(short_url: params[:short_url])
redirect_to @post