Actually, I'm not so sure if post creation is passing the validation
test either :)

Sorry for being confusing.

On Feb 27, 11:09 am, robo <chase.delanguille...@gmail.com> wrote:
> Ok so I have a few models that need to interact with each other -
> Blog, Post, and User.  I'll get their relationships out of the way:
>
> Blog
>   has_many :posts
>   has_and_belongs_to_many :users (by way of a join table, a blog can
> have many contributing users)
>
> Post
>   belongs_to :blog
>   belongs_to :user (the author of the post)
>
> User
>   has_and_belongs_to_many :blogs (a user can contribute to many blogs)
>   has_many :posts
>
> I'm running into a problem when validating posts; I want to ensure
> that the logged in user we find in the session is listed as a
> contributor to the blog they are trying to post to.  I added some
> validation to my Post model, that appears to be failing when editing
> an existing post.  Post creation, curiously, seems to pass the
> validation test.
>
> I should note that @user is a variable set by my ApplicationController
> using a before_filter.  really sure what's going on here, so any help
> is appreciated.  I'm guessing the @user set by my app controller
> probably isn't accessible by the Post class.
>
> Anyhow, here's my Post model:
>
> class Post < ActiveRecord::Base
>   belongs_to :blog
>   belongs_to :user
>   has_many :comments
>
>   validate :user_can_contribute
>
> private
>   def user_can_contribute
>     if @user.nil?
>       logger.info("@user hasn't been set yet!")
>     end
>
>     if !blog.users.include?(@user)
>       errors.add(:user, "You cannot contribute to this blog.")
>     end
>   end
> end

-- 
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-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to