Rails 访问别人的文章出错的问题 (ruby on rails tutorial)

runup · 2013年08月31日 · 最后由 zj0713001 回复于 2013年09月02日 · 2315 次阅读

源码地址https://github.com/runup/project 环境 xp 或者 ubuntu13.04 数据库 sqlite3 ruby1.9.3 rails3.2.13

背景描述: 在学习 ruby on rails tutorial 教程,做了发表文章的功能,其中 ariticle belongs to user 问题描述: 每一个用户都可以访问自己发表的文章,但是访问了别人的文章的时候显示报错,http://localhost:3000/articles/11 错误原因 Couldn't find Article with id=11 [WHERE "articles"."user_id" = 27] ,数据库显示没有在 article 这张表中没有 user_id=27 的数据。可能在添加链接的时候参数给错,但是自己新手,没有发现什么问题。 求前辈帮忙看下~~

@blacktulip 上次的回答受益匪浅,这个问题可能还是参数的问题。万谢前辈!

@messiahxu ,能不能帮我看看,谢谢前辈。

@zj0713001 求前辈帮忙看看,谢谢

def show
    @user = User.find(current_user)
    @article = @user.articles.find(params[:id])
end

@usercurrent_user@artical 当然只能看到 current_userartical, 也就是只能看到登录用户自己的

#4 楼 @dddd1919 我不知道如何将文章的用户的参数传进去,这个如何解决?请教前辈

#4 楼 @dddd1919 @user = User.find(current_user) 这条语句如何改?

可以直接这么着,不过。。可能违背教程初衷

def show
    @article = Articles.find(params[:id])
end

推荐这个看看,中文版的 http://railstutorial-china.org/

#7 楼 @dddd1919 这样子我这里报错 Couldn't find Article with id=27

#8 楼 @dddd1919 我是看这个的。我照着这个教程学习的

#8 楼 @dddd1919

  • <%=link_to article.title,article_path(article) %>
  • 是不是在这里要添加额外的参数?

    笔误 😳

    def show
        @article = Article.find(params[:id])
    end
    

    #12 楼 @dddd1919 disappointed_relieved: ???这个是什么意思?

    #12 楼 @dddd1919 按照你的方法报错 Couldn't find Article with id=27

    意思就是没找到 😰 ,这个有啥疑问么,确定 id=27 的文章存在?

    #15 楼 @dddd1919 数据库里面不存在 id=27 的文章

    我的数据库,这里 id 参数实际上 user_id 的参数

    #16 楼 @runup so rails 告诉你了 just think more!

    #18 楼 @dddd1919 额。。。。好吧,我在弄弄。不过用前辈的方法,我这里数据取不出来。

    你的路由里面 .../articles/11 这个 11 才是你的文章的 id,为啥用 user_id 作为搜索条件?是否了解 @article = Article.find(params[:id]) 的意思?

    #22 楼 @dddd1919 不理解@article = Article.find(params[:id]) 这句话,.../articles/11 这才是我需要的,但是跳出来的却是 27,是 user_id,这个东西我不太理解。

    #21 楼 @dddd1919 你的文档我也没有看到合适的说明

    #23 楼 @runup 我也不太明白 跳出来的 27 是啥意思,额 这个问题挺简单的,找个成手帮忙看看

    #25 楼 @dddd1919 非常感谢前辈指点,我感觉自己还是最基本的改变没有掌握清楚,比如@article = Article.find(params[:id]) 这句话,我在官方文档里面没有找到好的解释。感谢前辈。

    😰 难道 #22 楼 链接说的不明白?很全哦,初学仔细看看那个教程,最好别跳

    #26 楼 @runup 你可以

    rake routes
    

    一下,然后在结合着 http://guides.rubyonrails.org/routing.html 看。

    #3 楼 @runup 童鞋... Article.find(params[:id])的意思是在Article模型中寻找id=params[:id]的数据 你的 action 逻辑是不对的 反映出你的逻辑也是混乱的 你写的代码如下:

    def show
                  @user = User.find(current_user) #找到当前用户
                  @article = @user.articles.find(params[:id]) #从当前用户的所有Article里面找到id=params[:id]的Article
    
    end
    

    开动脑筋想一下 既然你想让自己能看到别人的 Article 这个逻辑显然是错误的 因为你把 show 里面的 Article 限定成了必须是当前用户的 Article 当然看不到别人的 我推荐你买本书看看 而不是一开始就上手堆代码 ruby 的乐趣在于用最少的代码解决问题,而不是写了一堆你不了解的代码出来再解决 我觉得 web 敏捷开发之道 4 比较适合现在的你 还有几个细节问题 1、缩进不对 我作为一个重度强迫症患者觉得好痛苦 特别是还空了一行...呜呜呜 2、我推荐你把代码 push 到 gitcafe 大品牌 安全 速度还快 3、思考大于动手 特别是多看书

    需要 登录 后方可回复, 如果你还没有账号请 注册新账号