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,因为 ActiveRecordposts table 中查找 stackid不存在。尝试

@post = Post.find_by(short_url: params[:short_url])
redirect_to @post