基本规则将用户ID存储到另一个表中作为外键在rails上的外键

问题描述:

作为初学者,我认为将当前用户会话ID存储到另一个表中会很容易,因为我设法将用户ID导入到Line_Items表中我相信我还没有理解将一个主键存储到另一个表中作为外键的基本原理,在我的情况下,这个外键正在尝试将会话User_ID存储到Carts表中,因为购物车属于用户并且用户有很多购物车。任何代码或有关这个问题的任何有用的链接将不胜感激。以下是我的模特。请让我知道是否需要其他代码来获得帮助。感谢:基本规则将用户ID存储到另一个表中作为外键在rails上的外键

class User < ActiveRecord::Base 
attr_accessible :email, :first_name, :last_name, :password, :role, :subscriber, :name 


has_many :line_item 
has_many :cart 


class NotAuthorized < StandardError; end 
end 

Cart.rb:

class Cart < ActiveRecord::Base 
attr_accessible :user_id 

has_many :line_items, dependent: :destroy 
belongs_to :user 

def add_phone(phone, current_user = nil) 

    current_item = line_items.find_or_initialize_by_phone_id(phone.id) 

    current_item.increment!(:quantity) 
    current_item.phone.decrement!(:stock) 
    current_item.user = current_user 
    current_item.phone.save 
    current_item 
end 

# returns true if stock level is greater than zero 
def can_add(phone) 
    phone.stock > 0 
end 

# returns the total number of items in a cart 
def number_of_items 
    total = 0 
    line_items.each do |item| 
     total += item.quantity 
    end 
    total 
end 

def empty? 
    number_of_items == 0 
end 

def grand_total 
    grand_total = 0 
    line_items.each do |item| 
     grand_total += item.quantity * item.phone.price 
    end 
    grand_total 
end 

end 
+1

你会得到什么错误? –

+1

我没有收到任何错误。我实际上完全不知道如何将主键作为ruby on rails中的外键获取到另一个表中。 –

你在你们的关系的声明有一个错误。他们应该是多元的,试试,看看是否有帮助,你也应该有一个USER_ID您的购物车&订单项模型。

has_many :line_items 
has_many :carts 
+1

谢谢你,但显然我没有任何代码将当前会话ID添加到购物车表。这是我需要帮助的。如果你可以帮助我,或者给我任何相关的链接,这将是非常有益的和赞赏。 –

+1

我明白了,基本上,你应该尝试的是在某个控制器上设置一个before_filter,在before_filter动作上,然后你可以创建,然后你可以设置一个购物车并将其Cart ID保存到会话中(这将推动购物车ID到客户的会话)。那么无论何时用户点击你的一个控制器在其会话中查找该Cart ID,并使用该ID加载该Cart。你需要用一些基本的东西来创建一个Cart模型,比如Content(可序列化的Hash也许?),user_id integer和其他你认为可能需要的字段,我希望这有助于 – DevDude

+1

我的购物车实际上正常工作,它增加了产品放入line_item表中,并将其显示在视图中,它也会计数并相乘以显示总数。如果你能编辑你的评论并给我一个能帮助你很多的例子,那将是非常棒的。如果你需要其他代码,我必须帮助你,我可以在我的帖子上更新它。再次感谢:) –

用户模型

has_many :line_items 
has_many :carts 

也符合项目模型,那么你可以说:

belongs_to :user 

我们可以通过提到:foreign_key为以下给出:

belongs_to :user, foreign_key: "user_id" 

希望这将是对你有帮助..

为了得到会话ID或在您的购物车控制器或行项目控制器保存记录

对于LineItem的

#In create action 
@line_item = current_user.line_items.build(params[:user]) 
# or 
@line_item.user = current_user 

用于购物篮

#In create action 
@cart = current_user.carts.build(params[:user]) 
# or 
@cart.user = current_user 

为了得到user id在控制器中寻找相关line_items and cart你可以简单地通过current_user.id

得到它的控制器或观看会话ID,您可以使用如下

session['session_id'] 

感谢。

+1

这听起来不错,但我需要写什么方法来编写购物车控制器和模型,以将会话用户ID导入购物车表。我已经有了可以正常工作的current_user方法。如何将会话ID获取到购物车表格中。提前致谢。 –

+1

为你编辑的答案..谢谢。 –

+1

非常感谢您的进一步帮助。我的应用程序真的很奇怪。您提供的代码不会将用户标识存储到购物车表中。我讨论的奇怪之处在于,当我删除购物车控制器中的创建操作时,它仍然在表中创建一条记录。您是否希望看到模型和订单项模型或任何控制器的整个代码? –