Problem with HABTM relation

13 views
Skip to first unread message

Daniel Goldberg

unread,
May 8, 2015, 9:03:17 AM5/8/15
to rubyonra...@googlegroups.com

When I try to create some User with the POST below I received the following msg:

Completed 404 Not Found in 17005ms (Views: 1.7ms | ActiveRecord: 6.6ms).

I debugged a little and I find this error

Couldn't find Shared::Category with ID=5 for Shared::User with ID=

I don't know really what's going on. I can't create any user.

Thanks!

------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[username]"
asdasdasd

------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[first_name]"
asd
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[last_name]"
asd
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[email]"
asdasdad@tob.uy
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[birth_date]"
Wed Apr 01 2015 00:00:00 GMT-0300 (ART)
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[brand]"
false
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[influencer]"
false
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[inspirational]"
false
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[gender]"
male
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[avatar]"; filename="ic_launcher.png"
Content-Type: image/png
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][0][id]"
5
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][0][name]"
facebook
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][0][avatar]"
http://localhost:3000/uploads/shared/category/avatar/5/big_facebook.png.webp
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][1][id]"
7
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][1][name]"
tobuycat
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[categories_attributes][1][avatar]"
http://localhost:3000/uploads/shared/category/avatar/7/big_ic_launcher.png.webp
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[password]"
123123
------WebKitFormBoundaryZnTz2ebfP2GeXgF8
Content-Disposition: form-data; name="user[password_confirmation]"
123123
------WebKitFormBoundaryZnTz2ebfP2GeXgF8--

Clases (in shared module)

class User < ActiveRecord::Base
    has_and_belongs_to_many :categories, class_name: 'Shared::Category', join_table: "categories_users"
    accepts_nested_attributes_for :categories

class Category < ActiveRecord::Base
    self.table_name = :categories

    has_and_belongs_to_many :users, class_name: 'Shared::User', join_table: "categories_users"
    accepts_nested_attributes_for :users

Controller:

def create
    user = Shared::User.new(user_params)
    user.created_by = staff_from_token
    location = user.save ? v1_private_user_url(user) : nil
    respond_with(user, location: location, serializer: Private::UserSerializer)
end

Serializers

module Shared
  class CategorySerializer < ActiveModel::Serializer
    attributes :name, :id, :avatar, :avatar_thumb
    def avatar_thumb
      Rails.env.test? ? object.avatar.url : object.avatar.thumb_webp.url
    end
    def users
      object.users.order(name: :asc)
    end
    def avatar
      Rails.env.test? ? object.avatar.url : object.avatar.big_webp.url
    end
  end
end


module Shared
  class UserSerializer < ActiveModel::Serializer
    attributes :first_name, :last_name, :email, :gender, :username, :inspirational,
               :location, :brand, :influencer, :birth_date, :avatar, :avatar_thumb, :id,
               :facebook_uid, :categories
    def avatar_thumb
      Rails.env.test? ? object.avatar.url : object.avatar.thumb_webp.url
    end
    def avatar
      Rails.env.test? ? object.avatar.url : object.avatar.big_webp.url
    end
    def categories
      object.categories.map do |category|
        CategorySerializer.new(category)
      end
    end
  end
end

Frederick Cheung

unread,
May 8, 2015, 10:28:39 AM5/8/15
to rubyonra...@googlegroups.com, caza...@gmail.com


On Friday, May 8, 2015 at 2:03:17 PM UTC+1, Daniel Goldberg wrote:

When I try to create some User with the POST below I received the following msg:

Completed 404 Not Found in 17005ms (Views: 1.7ms | ActiveRecord: 6.6ms).

I debugged a little and I find this error

Couldn't find Shared::Category with ID=5 for Shared::User with ID=

I don't know really what's going on. I can't create any user.


Is there a category with ID 5? The parameters your form is submitting imply that there should be an already existing category with that id that is already associated with this user (which if the user is not new) is not possible. This is probably down to how you are building your form and what you are trying to do (in particular do you want a form that creates users & associated categories in one go or one that creates a user and associates a number of pre-existing categories with the user?)

Fred

Reply all
Reply to author
Forward
0 new messages