控制器方法调用模型方法来生成令牌。在控制器方法内部,生成的令牌也保存在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写入哪个用户/计算机?
答案 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