Forum: Ruby on Rails Question about Rails behaviour

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A1247f73598357f06388e863c41aa624?d=identicon&s=25 Elias Orozco (elioncho)
on 2008-10-27 08:15
(Received via mailing list)
Hello,

Well I have a post and a post_picture model:

class Post < ActiveRecord::Base
  has_one :post_picture
end

class PostPicture < ActiveRecord::Base
  belongs_to :post
end

When a user creates a post he/she can upload a picture. So in the
create action on the posts_controller I have the following:

def create
    @post = Post.new(params[:post])
    @post_picture = PostPicture.new(:uploaded_data =>
params[:post_picture_file])
    @post.post_picture = @post_picture
    if @post.save
...
end

As you can see I relate the @post_picture with the @post using the
line of code

"@post.post_picture = @post_picture"

My question is:

When I do the @post.save does rails treats this as a transaction? (I
want to know because there is maybe possible data loss if the post is
saved into the posts table and the post_picture is not saved into the
post_pictures table or viceversa.

Thanks,

Elioncho
80e4cb97cae5c8d745f72337d93fd8f2?d=identicon&s=25 none (Guest)
on 2008-10-27 09:15
(Received via mailing list)
since post_picture should await post_id as a foreign key, post_picture
will not be saved properly (or at least will not relate to the
specified post) if post is not saved. as long as there aint no post.id
(which is created while saving) you can't save the relation between
these two objects.

i'd say it's best to save @post and after that create @post_picture
and save it as well.

def create
  @post = Post.new(params[:post])
  if @post.save
    @post_picture = PostPicture.new(:uploaded_data =>
params[:post_picture_file])
    @post.post_picture = @post_picture
    if @post_picture.save
      # post and post_picture are saved correctly
      # ...
    else
      # post_picture could not be saved (=> error handling)
    end
  else
    # post could not be saved (=> error handling)
  end
end
A1247f73598357f06388e863c41aa624?d=identicon&s=25 Elias Orozco (elioncho)
on 2008-10-27 18:45
(Received via mailing list)
Thanks for your reply. It was helpful.

Elioncho
This topic is locked and can not be replied to.