在模型方法或控制器中写入cookie?

时间:2016-01-23 15:32:23

标签: ruby-on-rails model-view-controller cookies

控制器方法调用模型方法来生成令牌。在控制器方法内部,生成的令牌也保存在cookie中:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/image1"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/topText" android:layout_marginTop="34dp" android:textColor="#FFF" android:gravity="center_horizontal" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/bottomText" android:layout_alignParentBottom="true" android:layout_alignLeft="@+id/topText" android:layout_alignStart="@+id/topText" android:layout_marginBottom="35dp" android:textColor="#FFF" android:gravity="center_horizontal" /> </RelativeLayout>

在创建令牌的模型方法中包含最后一行是不是更好?它是DRYer,因为我有多个具有相同行为的控制器(使用相同的模型方法)。我忘记这些饼干线的风险较低。或者是否无法在模型方法中执行此命令?

更新:我认为在模型方法中无法做到这一点,因为要知道将cookie写入哪个用户/计算机?

1 个答案:

答案 0 :(得分:2)

模型应该不了解用户cookie等概念。它真的是一个控制器。

如果您在不同控制器上使用该线路,则可以将其移至ApplicationController

class ApplicationController < ActionController::Base
  def store_remember_token(user)
    cookies.permanent[:remember_token] = user.remember_token
  end
end

然后在您的控制器中重复使用它:

class SomethingsController < ApplicationController
  def show
    @user = # ...
    store_remember_token(@user)
  end
end