首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4错误: ActiveRecord::RecordNotFound /未能找到'id'=

Rails 4错误: ActiveRecord::RecordNotFound /未能找到'id'=
EN

Stack Overflow用户
提问于 2016-09-04 16:34:46
回答 4查看 699关注 0票数 1

我对rails和编写我的第一个应用程序相当陌生。只是想不出怎么在我的控制器里瞄准下面的东西。

控制器

代码语言:javascript
复制
def index
  @tool = Tool.find(params[:id])
  @favorites = current_user.favorites
  @tools = Tool.where(user_id: current_user).order("created_at DESC")
  @user = current_user
end

索引视图

代码语言:javascript
复制
%h2 My Favorite Tools
- @favorites.each do |tool|
    = image_tag tool.cover_filename.url
    %h2= link_to tool.title, tool
    %p= tool.subtitle
    %p= @tool.impressionist_count
    %p= link_to @tool.get_upvotes.size, like_tool_path(@tool), method: :get
    %p= link_to "Edit", edit_tool_path(tool)
    %p
        http://ocubit.com/tools/
        = @tool.id
    %p= time_ago_in_words(tool.created_at)

%h2 My Tools
- @tools.each do |tool|
    = image_tag tool.cover_filename.url
    %h2= link_to tool.title, tool
    %p= tool.subtitle
    %p= @tool.impressionist_count
    %p= link_to "Edit", edit_tool_path(tool)
    %p
        http://ocubit.com/tools/
        = @tool.id
    %p= time_ago_in_words(tool.created_at)


= link_to "View Your Profile", '/users/'+@user.id.to_s

-if @user.use_gravatar?
    = image_tag gravatar_for @user
- else
    = image_tag @user.avatar_filename.url

%h1= @user.username

= link_to "Edit", edit_user_registration_path

如果在浏览器中运行此操作,则会出现以下错误:

代码语言:javascript
复制
ActiveRecord::RecordNotFound in ToolsController#index
Couldn't find Tool with 'id'=

我已经将控制器改为(测试)

代码语言:javascript
复制
@tool = Tool.find(1)

这是可行的,所以问题就在这里。我就是搞不懂。

提前感谢您的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-04 17:04:09

你其实不需要这句话:

@tool = Tool.find(params:id)

如果您在索引视图中,则需要显示所有工具,而不仅仅是一个工具。THat将用于:show视图。在索引视图中没有params:id,而不是在url中指定。

所以:

代码语言:javascript
复制
def index
  @user = current_user
  @favorites = @user.favorites
  @tools = @user.tools.order("created_at DESC")
end



%h2 My Favorite Tools
- @favorites.each do |tool|
    = image_tag tool.cover_filename.url
    %h2= link_to tool.title, tool
    %p= tool.subtitle
    %p= tool.impressionist_count
    %p= link_to tool.get_upvotes.size, like_tool_path(tool), method: :get
    %p= link_to "Edit", edit_tool_path(tool)
    %p
        http://ocubit.com/tools/
        = tool.id
    %p= time_ago_in_words(tool.created_at)

%h2 My Tools
- @tools.each do |tool|
    = image_tag tool.cover_filename.url
    %h2= link_to tool.title, tool
    %p= tool.subtitle
    %p= tool.impressionist_count
    %p= link_to "Edit", edit_tool_path(tool)
    %p
        http://ocubit.com/tools/
        = tool.id
    %p= time_ago_in_words(tool.created_at)


= link_to "View Your Profile", '/users/'+@user.id.to_s

-if @user.use_gravatar?
    = image_tag gravatar_for @user
- else
    = image_tag @user.avatar_filename.url

%h1= @user.username

= link_to "Edit", edit_user_registration_path
票数 1
EN

Stack Overflow用户

发布于 2016-09-04 16:58:50

这是由于params[:id]等于nil。尝试打开此URL,然后将代码更改为:

代码语言:javascript
复制
# open this URL to pass parameter tool_id
http://localhost:3000/favorites?tool_id=1

# in view 
<%= link_to "Favorites", favorites_path(tool_id: 1) %>

# controller
def index
  @tool = Tool.find(params[:tool_id])
end
票数 1
EN

Stack Overflow用户

发布于 2016-09-04 17:02:52

它们的关键是索引控制器中没有params:id。删除这一行:@tool = Tool.find(params:id)

不要使用“工具”,而要在视图中使用“工具”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39319144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档