Session, Request, Params Ada Di Model. OK or Break the MVC Concept

ruby, rails, mvc

berikut contoh application_controller.rb

class ApplicationController < ActionController::Base
  around_filter :_controller_for_model

  ....

  protected
  def _controller_for_model
    accessor = instance_variable_get(:@_request)
    kelasess = [ActiveRecord::Base, ActiveRecord::Base.class]

    kelasess.each do |kelas|
      kelas.send(:define_method, "controller", proc {accessor})
    end
    yield
    kelasess.each do |kelas|
      kelas.send :remove_method, "controller"
    end

  end
end

klo lo modif ApplicationController kaya diatas, Model lo bakal punya method controller yang bisa punya isinya session, request dan params MVC, Model View Controller. adalah sebuah concept yang ngebantu developer, memisahkan antara logic, design dan Representasi data storage. konsep ini keren bgt, apalagi kalo applikasi yang dikembangkan oleh team yang masing-masing udah punya job desc-nya sendiri - sendiri. Yang designer, urusannya di View, Programmer di Controller dan Model. Tapi terkadang, buat orang males kaya gue. suka nemuin case (mungkin lo juga sering nemuin). contoh : ada Model User, dan Post. Keduanya saling berelasi

#model User
class User < ActiveRecord::Base
  has_many :posts
end
#model Post
class Post < ActiveRecord::Base
  belongs_to :user
end

session yang merepresentasi kan user yang sudah login udah ada misal, di sebuah Controller kita dah definisikan ini

  class UserController < ApplicationController
    def auth
        user = User.where({:user_name => params[:user], :password => params[:password]})
        if !user.nil?
            session[:current_user_id] = user.id
        else
            #FTW, Lupa cuyy ??
            redirect_to request.referer
        end
    end
    ....
  end

(Anggep aja, males nulis code nya) kita sudah punya resource Posts. ketika user mau bikin post baru, masalahnya muncul. Mana yang lo pilih, Lo mendefnisikan user(yang udah login) yang belongs_to post lewat resource PostsController

#dalam PostController
def create
  @post = post.new(params[:post])
  @post.user =  User.find(session[:current_user_id])
  respond_to do |format|
    ....
  end
end

atau lo detect di Post (model) pake callback?

#dalam model Post
before_save :detect_current_user
def detect_current_user
  user = User.find(controller.session[:current_user_id]) unless session[:current_user_id].nil?
end
#note, method controller ada klo ApplicationController dah di modif kaya snippet yang paling atas

ini contoh sederhana aja. mungkin lo juga sering nemuin case yang lebih complex lagi yang membuat model harus bisa punya method request, sesssion, params langsung didalam model itu sendiri. tanpa harus passing argument ke model itu lewat controller

Break MVC atau Mempermudah lo ??. gimana bijaksananya lo aja dalam ngoding, dan x-factor yang lo temuin dalam setiap development lo ..