Знаете ли вы, что вы можете передавать любые переменные в партиал, используя опцию: locals?
render :partial => "whatever", :locals => {:foo => bar}
# bar is available as local variable foo within _whatever.erb
Btw. если вы хотите сделать некоторые локальные переменные необязательными, вы можете использовать следующую уловку, чтобы избежать ошибки «нет такой переменной»:
- optional_variable ||= nil # defines optional_variable without overwriting it
Я думаю, что с помощью этого вы сможете делать все, что можете себе представить :).