rails3

2011-12-25 8 views
1

に、私は、データベースからクリーンな結果を得ることができないデータベースから選択し、ID 6を持つユーザーのためのrails3

module PagesHelper 
    def list 
     wishes = WishList.select("content").where("user_id = #{@user.id}")  
     wishes.each do |wish|             
      puts wish.fetch_hash             
     end                  
    end                   
end 

結果:

[#<WishList content: "test3">, #<WishList content: "test4">, #<WishList content: "test5">] 

しかし、私は次のようにリストを取得したい: TEST3、私はそれを得ることができますどのように洪水なく、test4、test5?

答えて

2

まず、史上かつてないwhereに値を補間することはありません。これにより、SQLインジェクションが可能になります。

WishList.select("content").where("user_id = #{@user.id}") 

そして、これはOKです:たとえば、これは悪いです

WishList.select("content").where(:user_id => @user.id) 

これは自動的中での必要性が本当に存在していない、クエリの@user.id部分を逃れるますそして、誰もがに任意の値を通過することができ

User.select("email, password").where("admin = #{params[:admin]}") 

:あなたはこのような何かをやっていたこのクエリが、想像10人が欲しい。

So.とにかく


、協会を通じたアクセスを:次に

wishes = @user.wishlist.select("content") 

カール・ラズロが推奨されているように:

wishes.map(&:content) 
1

の代わりに:

wishes.each do |wish|             
    puts wish.fetch_hash             
end 

の操作を行います。

wishes.map(&:content)