11

PHPから移行した後、私はRailsに不慣れであり、フラストレーションに終わりはありませんが、急な学習曲線があることを願っています。

レールでツイッターのクローンを作成する方法についてのガイドに従っていて、その道を歩み続けて、ますますツイッターのようになりました。

したがって、ユーザーからのすべての投稿を表示する「ユーザー」ページ/users/show.html.erbがあります。

現在ログインしているユーザーがページの所有者と同じである場合、ユーザーが新しいエントリを追加できるようにテキストボックスを表示しようとしています。

私は非常に単純なはずのものを持っています

<%if params [:id] == session [:user_id]%>
    ここにテキストボックスを置きます
<%終了%>

もちろん、それは機能していませんが、そのすぐ上にsession [:user_id]とparams [:id]の両方を出力しましたが、出力はまったく同じです。

==を!=に設定すると、「ここにテキストボックスを入力してください」というメッセージが表示されます。

私が間違っていることについて何か提案はありますか?現在ログインしているユーザーのURLと出力からわかるように、これら2つの値が一致していることがわかります。私も出力しました

-<%session [:user_id]%>-
-<%params [:id]%>-

パラメータの両端にギャップやスペース、その他の文字がないことがわかり、すべてがきれいに見えます。

出力は次のようになります

-4c4483ae15a7900fcc000003-
-4c4483ae15a7900fcc000003-

これは、スペースなどがないことを示すために両側にダッシュが付いたユーザーのmongodbobjectIdです。

4

3 に答える 3

19

両方のアイテムが単純な文字列であると確信していますか?走るとどうなるか

params[:id].to_s == session[:user_id].to_s

于 2010-07-19T17:31:25.340 に答える
2

それはjasonpgignacが指摘したようかもしれません。IRBに参加する場合:

num = "7"
num2 = 7
num == num2 # => false

それらが両方とも同じタイプであることを確認してください。パッティング<%= num2 %>は実際に.to_sメソッドをトリガーします...したがって、.erbページに出力したときに2つが等しいように見えるのはなぜですか。

また、その比較をコントローラーに移動することもできます。何かのようなもの:

@is_user_home = params[:id].to_s == session[:user_id].to_s

次に、あなたはあなたの見解を入れることができます:

<% if @is_user_home %>
    code here
<% end %>

コードが少し読みやすくなります。

于 2010-07-19T17:38:32.623 に答える
0

すでに述べたように、ほとんどの場合、この種の問題は比較されたタイプの不一致によって引き起こされます。to_s両方の変数に追加するだけで、ほとんどの場合が解決します。

ここでは、Rubyで使用されるすべての種類の比較について詳しく知るために、優れたソースを確認してください。

于 2017-02-01T18:19:56.757 に答える