Hello, I am currently developing an engine which allows several different sites to be served using the same code. The implementation is like this: - every Post has a site_id field, which is set to the ID is the site to which the post belongs to. - in Apache config, I have something like: ServerName site1.com ServerAlias site2.com site1.com and site2.com are different sites, with ID''s 1 and 2. When a user accesses the site, engine detects which url is used (by comparing request.host against sites database) and serves only posts with the corresponding site_id. @current_site variable is set on application controller level before any page is served to user. The question: I want to make the process of creating posts as clean as possible. Meaning that when a post is saved, site_id is automatically attached to it. The best possible way would be to do it in post model''s before_save function, but the problem is that neither @current_site variable, nor request is available to the post model. I tried to use observers with no luck (same access problems as with model) Any ideas or may be some fresh approaches are very appreciated. I really would like to leave setting site_id in controller as a last resort (doesn''t take much time to implement, but just oh so un- clean :) TIA, Mike. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Just set the site_id in the controller before calling post.save. b Mikhail Kornienko wrote:> Hello, > > I am currently developing an engine which allows several different > sites to be served using the same code. The implementation is like > this: > > - every Post has a site_id field, which is set to the ID is the site > to which the post belongs to. > - in Apache config, I have something like: > ServerName site1.com > ServerAlias site2.com > > site1.com and site2.com are different sites, with ID''s 1 and 2. When a > user accesses the site, engine detects which url is used (by comparing > request.host against sites database) and serves only posts with the > corresponding site_id. @current_site variable is set on application > controller level before any page is served to user. > > The question: > I want to make the process of creating posts as clean as possible. > Meaning that when a post is saved, site_id is automatically attached > to it. The best possible way would be to do it in post model''s > before_save function, but the problem is that neither @current_site > variable, nor request is available to the post model. > I tried to use observers with no luck (same access problems as with > model) > > Any ideas or may be some fresh approaches are very appreciated. I > really would like to leave setting site_id in controller as a last > resort (doesn''t take much time to implement, but just oh so un- > clean :) > > TIA, > Mike. > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the great idea Ben! That''s how I have implemented it (is it the way you meant it?). All controllers in admin interface have AdminController as a parent so I define the "fix" on the topmost level. class AdminController < ApplicationController ..... before_filter :set_site_id, :only => [:create, :update] private def set_site_id() params[:page][:site_id] = @current_site.id end ..... I wonder if there''s a better way? Or the current approach is good enough. I don''t really like to juggle with params array manually. mike. On Apr 24, 4:55 pm, Ben Munat <bmu...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Just set the site_id in the controller before calling post.save. > > b > > Mikhail Kornienko wrote: > > Hello, > > > I am currently developing an engine which allows several different > > sites to be served using the same code. The implementation is like > > this: > > > - every Post has a site_id field, which is set to the ID is the site > > to which the post belongs to. > > - in Apache config, I have something like: > > ServerName site1.com > > ServerAlias site2.com > > > site1.com and site2.com are different sites, with ID''s 1 and 2. When a > > user accesses the site, engine detects which url is used (by comparing > > request.host against sites database) and serves only posts with the > > corresponding site_id. @current_site variable is set on application > > controller level before any page is served to user. > > > The question: > > I want to make the process of creating posts as clean as possible. > > Meaning that when a post is saved, site_id is automatically attached > > to it. The best possible way would be to do it in post model''s > > before_save function, but the problem is that neither @current_site > > variable, nor request is available to the post model. > > I tried to use observers with no luck (same access problems as with > > model) > > > Any ideas or may be some fresh approaches are very appreciated. I > > really would like to leave setting site_id in controller as a last > > resort (doesn''t take much time to implement, but just oh so un- > > clean :) > > > TIA, > > Mike.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Looks like the approach above solves the problem with setting site_id
on save, but it doesn''t solve the problem overall.
I do need some way to access either @params or a variable set inside
the action controller. That''s because I want to modify model''s
default
find method so all search would return only records which belong to
current site.
Currently I have the following find method which overrides the default
find in the model:
def self.find(*args)
with_scope(:find => { :conditions =>
"posts.post_type=''page''" })
do
super
end
end
What I would like to be able to do it:
def self.find(*args)
with_scope(:find => { :conditions =>
["posts.post_type=''page'' and
posts.site_id=?", @current_site_id] }) do
super
end
end
Where @current_site_id is defined in action controller (that''s where
the @request array becomes available).
Any ideas?
On Apr 24, 5:13 pm, Mikhail Kornienko
<macdig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Thanks for the great idea Ben!
>
> That''s how I have implemented it (is it the way you meant it?).
All
> controllers in admin interface have AdminController as a parent so I
> define the "fix" on the topmost level.
>
> class AdminController < ApplicationController
> .....
> before_filter :set_site_id, :only => [:create, :update]
>
> private
> def set_site_id()
> params[:page][:site_id] = @current_site.id
> end
> .....
>
> I wonder if there''s a better way? Or the current approach is good
> enough. I don''t really like to juggle with params array manually.
>
> mike.
>
> On Apr 24, 4:55 pm, Ben Munat
<bmu...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> > Just set the site_id in the controller before calling post.save.
>
> > b
>
> > Mikhail Kornienko wrote:
> > > Hello,
>
> > > I am currently developing an engine which allows several
different
> > > sites to be served using the same code. The implementation is
like
> > > this:
>
> > > - every Post has a site_id field, which is set to the ID is the
site
> > > to which the post belongs to.
> > > - in Apache config, I have something like:
> > > ServerName site1.com
> > > ServerAlias site2.com
>
> > > site1.com and site2.com are different sites, with ID''s 1
and 2. When a
> > > user accesses the site, engine detects which url is used (by
comparing
> > > request.host against sites database) and serves only posts with
the
> > > corresponding site_id. @current_site variable is set on
application
> > > controller level before any page is served to user.
>
> > > The question:
> > > I want to make the process of creating posts as clean as
possible.
> > > Meaning that when a post is saved, site_id is automatically
attached
> > > to it. The best possible way would be to do it in post
model''s
> > > before_save function, but the problem is that neither
@current_site
> > > variable, nor request is available to the post model.
> > > I tried to use observers with no luck (same access problems as
with
> > > model)
>
> > > Any ideas or may be some fresh approaches are very appreciated. I
> > > really would like to leave setting site_id in controller as a
last
> > > resort (doesn''t take much time to implement, but just oh
so un-
> > > clean :)
>
> > > TIA,
> > > Mike.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Mikhail Kornienko wrote:> Looks like the approach above solves the problem with setting site_id > on save, but it doesn''t solve the problem overall. > > I do need some way to access either @params or a variable set inside > the action controller. That''s because I want to modify model''s default > find method so all search would return only records which belong to > current site. > > Currently I have the following find method which overrides the default > find in the model: > > def self.find(*args) > with_scope(:find => { :conditions => "posts.post_type=''page''" }) > do > super > end > end > > What I would like to be able to do it: > > def self.find(*args) > with_scope(:find => { :conditions => ["posts.post_type=''page'' and > posts.site_id=?", @current_site_id] }) do > super > end > end > > Where @current_site_id is defined in action controller (that''s where > the @request array becomes available). > Any ideas?Well, find has *args to play with... maybe just pass the current_site_id to find. Don''t know if having an extra arg in the array will make the call to super puke, but you can always remove it before calling super. b> On Apr 24, 5:13 pm, Mikhail Kornienko <macdig...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> Thanks for the great idea Ben! >> >> That''s how I have implemented it (is it the way you meant it?). All >> controllers in admin interface have AdminController as a parent so I >> define the "fix" on the topmost level. >> >> class AdminController < ApplicationController >> ..... >> before_filter :set_site_id, :only => [:create, :update] >> >> private >> def set_site_id() >> params[:page][:site_id] = @current_site.id >> end >> ..... >> >> I wonder if there''s a better way? Or the current approach is good >> enough. I don''t really like to juggle with params array manually. >> >> mike. >> >> On Apr 24, 4:55 pm, Ben Munat <bmu...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> >>> Just set the site_id in the controller before calling post.save. >>> b >>> Mikhail Kornienko wrote: >>>> Hello, >>>> I am currently developing an engine which allows several different >>>> sites to be served using the same code. The implementation is like >>>> this: >>>> - every Post has a site_id field, which is set to the ID is the site >>>> to which the post belongs to. >>>> - in Apache config, I have something like: >>>> ServerName site1.com >>>> ServerAlias site2.com >>>> site1.com and site2.com are different sites, with ID''s 1 and 2. When a >>>> user accesses the site, engine detects which url is used (by comparing >>>> request.host against sites database) and serves only posts with the >>>> corresponding site_id. @current_site variable is set on application >>>> controller level before any page is served to user. >>>> The question: >>>> I want to make the process of creating posts as clean as possible. >>>> Meaning that when a post is saved, site_id is automatically attached >>>> to it. The best possible way would be to do it in post model''s >>>> before_save function, but the problem is that neither @current_site >>>> variable, nor request is available to the post model. >>>> I tried to use observers with no luck (same access problems as with >>>> model) >>>> Any ideas or may be some fresh approaches are very appreciated. I >>>> really would like to leave setting site_id in controller as a last >>>> resort (doesn''t take much time to implement, but just oh so un- >>>> clean :) >>>> TIA, >>>> Mike. > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---