2017-05-17 5 views
0

私は、ユーザーが属性の1つを変更できるようにする問題にぶつかっています。私はホームページに、設定していない場合にこの属性を設定するように促したい。(Ruby on Rails)属性の存在に応じてビューを変更していますか?

私は、この属性の存在を確認するために、このメソッドを書いている:私はELSIFがあればトリガする必要があると考えてい

<% if is_admin? %> 
    #render admin 
<% elsif !start_date_set? %> 
    #this is what i want to see 
<%else %> 
    #render users posts 
<% end %> 

<%#=if not logged in %> 
<% else %> 
    #signup page is rendered 
    #this is what shows up 
<% end %> 

を:

def start_date_set? 
    current_user.start_date? 
    end 

をそして、私の見解では、私が書きましたstart_dateセットはありません。これは、新しいアカウントが作成されたときにあってはなりません。しかし、それはトリガしないで、最後のelse条件を表示します。

レンダリングすべきビューがなぜそうでないのか誰にも分かりますか?

class AddStartDateToUser < ActiveRecord::Migration[5.0] 
    def change 
    add_column :users, :start_date, :datetime 
    end 
end 
+0

はhttp://edgeguides.rubyonrails.org/debugging_rails_applications.html#consoleコンソールを削除しようと 'start_date_setを検査'メソッド?。それはどの価値を返すのですか? – Psylone

+0

「start_date_set?」と入力するとコンソール上のコンソールに「NoMethodError:未定義のメソッドstart_date?」と表示されます。 nil:NilClass " - althoこの方法を検査するかどうかはわかりません。 – Andrew

+0

私はあなたが実際にビューでそれを処理するのではなく、サインインページにユーザーをリダイレクトする必要があるコントローラレイヤーで認証チェックを行うべきだと思います。 – max

答えて

0

それは私はありません、アカウントがアクティブになった後は、私の方法は、唯一の仕事と判明:これは、ユーザーにSTART_DATEを添付の移行である

を追加するために編集した

なぜそれがうまくいったのかは分かりません。私は上記のコードを有効にしたアカウントで試してみるとうまくいきました。

0

あなたがログインしているかどうかを確認するには、else文を別のif文で囲む必要があります。このため、current_userオブジェクトのプレセンセンスを確認できます。 if文これで、あなたのビューは次のようになります。

<%#= if logged in %> 
<% if current_user %> 
    <% if is_admin? %> 
    # render admin 
    <% elsif !start_date_set? %> 
    # this shows up if you are logged in and start_date_set? returns false 
    <% else %> 
    # render users posts 
    <% end %> 
<%#= if not logged in %> 
<% else %> 
    # signup page is rendered when not logged in 
<% end %> 
関連する問題