#3
Nov 06, 2008

Session Based Model

If you have a lot of logic associated with the data inside a session, you’ll need some central location to put this logic. See how to create a session based model in this episode.
如果在session里有很多相关逻辑的数据,您需要一些主要的位置来放置逻辑。这个视频教你如何基于model上建立session.

Tags: models
Bittorrent 种子下载 推荐使用 (40 MB, 13:26)
直接下载/Direct Download Link (40 MB, 13:26)

# models/user_session.rb
class UserSession
  def initialize(session)
    @session = session
    @session[:comment_ids] ||= []
  end
  
  def add_comment(comment)
    @session[:comment_ids] << comment.id
  end
  
  def can_edit_comment?(comment)
    @session[:comment_ids].include?(comment.id) && comment.created_at > 15.minutes.ago
  end
end

# controllers/application.rb
def user_session
  @user_session ||= UserSession.new(session)
end
helper_method :user_session

# comments_controller.rb
before_filter :authorize, :only => [:edit, :update]

def create
  @comment = Comment.new(params[:comment])
  if @comment.save
    user_session.add_comment(@comment)
    flash[:notice] = "Successfully created comment."
    redirect_to article_url(@comment.article_id)
  else
    render :action => 'new'
  end
end

private

def authorize
  unless user_session.can_edit_comment? Comment.find(params[:id])
    flash[:error] = "You are no longer able to edit this comment."
    redirect_to root_url
  end
end

<% if user_session.can_edit_comment? comment %>
  <p><%= link_to "Edit", edit_comment_path(comment) %></p>
<% end %>

RSS Feed for Episode Comments 2 留言/comments

1. dong Nov 17, 2008 at 06:18

谢谢!!


2. zhujg Nov 25, 2008 at 03:43

谢谢!!

添加留言:/Add your comment:

(SKIP THIS ONE)

(required)

(not shown)


(可以使用pastie或者gist添加代码) (use pastie or gist for code)

if you want to help:
required:
BT下载工具
Get Bittorrent Tool
VLC播放器
Get VLC Media Player