2016-12-08 3 views
0

ユーザーが最初に投稿の新しいページ(.../posts/new)にアクセスしたときのタイムスタンプを保存したいこのタイムスタンプをデータベースの投稿テーブルに保存します。Rails:ユーザーが「新しい」ページにアクセスしてデータベースに保存するときのタイムスタンプの取得

私はポストのテーブルでは、これまで

  1. 何をやったか、私が追加され、私がきた私のposts_controller.rbでは、データ型のタイムスタンプ
  2. を持っているという名前の列first_time_visitを移行しましたfirst_time_visit属性をTime.nowに設定して@postを初期化しました
  3. 私はすでに「first_time_visit」属性をホワイトリストに入れました。

問題:

  • 新しい投稿を作成して保存した後、first_time_visit列は、まだ "ゼロ" です。

    私post.rbモデルで:

    def add_first_time_visit(time) 
        self.first_time_visit = time 
    end 
    

    私posts_controllerで私のposts_controller.rb

    def new 
        @post = Post.new(first_time_visit: Time.now) 
    end 
    
    def create 
        @post = current_user.posts.build(post_params) 
    
        if @post.save 
        redirect_to posts_path, notice: "Post saved." 
        else 
        render 'new', notice: "Post could not be saved." 
        end 
    end 
    
    ... 
    
    private 
    def post_params 
        params.require(:post).permit(:description, :link, :first_time_visit) 
    end 
    

は、私はまた、別の解決策を試してみました。 rb:

def new 
    @post = Post.new 
    @post.add_first_time_visit(Time.now) 
end 

しかし、この解決法でも私には「無」しか与えられません。

答えて

1

フォームに非表示フィールドとしてfirst_time_visitを追加します。

Railsの規約では、datetimeフィールドの末尾にatという名前を付ける必要があります。 first_time_visit =>first_time_visited_at

+0

ああ、私はとても馬鹿だと感じています。もちろん、隠しフィールドはうまくいきました。私は<%= hidden_​​field:first_time_visit、value = Time.current%>を自分のフォームに追加しました。しかし、私はあなたの2番目の提案は私がそれを望むように動作しないだろうと思いますか?なぜなら、ユーザーは/ posts/new pageを訪れる時間ではなく、投稿が作成される時刻を追加するからです。 – OhDaeSu

+0

あなたは2番目の提案はあなたのケースでは動作しません。答えから削除します。 –

+0

'first_time_visit'をセッションに保存し、' create'アクションでそれを抽出することもできます。 –

関連する問題