我有多个品牌的应用程序。
单个用户可以拥有多个品牌,几乎应用程序中的每个查询都通过其品牌来限制用户。
用户有 ManyToMany 和 Brand(s) 。
例如,我想List<Employee>从数据库中提取。
s.createQuery("FROM User user INNER JOIN user.brands brands WHERE brands IN(1,2)");//(1,2) = :brands
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将不止一次获得同一个用户,因为该用户拥有多个与他相关的品牌。
如何在不需要不同的情况下查询品牌而不会影响我的结果?
这是用户实体:
public class User {
@Id
@Column(name="USER_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer userId;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="USERS_BRANDS" , joinColumns = {@JoinColumn(name="USER_ID")},inverseJoinColumns={@JoinColumn(name="BRAND_ID")})
private Collection<Brand> brands;
...other members
...getters and setters
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我在 Django 中遇到了“自我”多对多关系的问题:
我的模型:
class EcomProduct(models.Model):
products = models.ManyToManyField('self', through='EcomProductToProduct', symmetrical=False),
class EcomProductToProduct(models.Model):
from_ecom_product = models.ForeignKey(EcomProduct,related_name='from_ecomproduct')
to_ecom_product = models.ForeignKey(EcomProduct,related_name='to_ecomproduct')
class Meta:
db_table = u'ecom_product_to_product'
Run Code Online (Sandbox Code Playgroud)
现在在 views.py 中,我需要获取与特定产品相关的所有产品:
def show_product(request, ecomproduct_slug, template_name="catalog/product.html"):
p = get_object_or_404(EcomProduct, slug=ecomproduct_slug)
related_products_to_product = p.products.all() #it doesn't work
Run Code Online (Sandbox Code Playgroud)
我收到消息:
Exception Value: 'tuple' object has no attribute 'all'
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决它。问题是如何获得特定产品的所有相关产品?提前感谢您的帮助。
那么这个对我来说是一个头脑风暴.我有一个带标签的帖子系统.标签与帖子有很多很多关系.
问题是我想根据他们与当前标签匹配的标签数来选择其他帖子.
一个快速的视觉示例:
PostA: TagA, TagB
PostB: TagC
PostC: TagA
PostD: TagA, TagB
Run Code Online (Sandbox Code Playgroud)
所以,如果我输入PostA,它会给我PostD,PostC.
我真的甚至不知道从哪一个开始,我希望有人比我遇到这个问题更聪明,可以提供一些帮助.
我一直在修补这个问题已有一段时间了,似乎无法弄明白这一点.它可能很简单,但是这里有:
我在'层压板'和'标准'之间有一个has_many:trough关系,加上模型'标准化'.
Standard.rb
class Standard < ActiveRecord::Base
attr_accessible :description, :name
has_many :standardizations
has_many :laminates, :through => :standardizations
end
Run Code Online (Sandbox Code Playgroud)
Standardization.rb
class Standardization < ActiveRecord::Base
attr_accessible :laminate_id, :standard_id
belongs_to :laminate
belongs_to :standard
end
Run Code Online (Sandbox Code Playgroud)
Laminate.rb
class Laminate < ActiveRecord::Base
attr_accessible :name, :standard_ids
has_many :standardizations
has_many :standards, :through => :standardizations
end
Run Code Online (Sandbox Code Playgroud)
情景是层压板可以属于几个标准,我已经在视图的新部分工作了 - 复选框和所有东西.我的问题是在尝试显示给定层压板的相应标准的名称时.截至目前,我能够显示层压板所分配的标准,但不仅仅是标准的名称.
我的show.html.erb说:
<%= @laminate.standards %>
Run Code Online (Sandbox Code Playgroud)
这会使一切正确,但是说
<%= @laminate.standards.name %>
Run Code Online (Sandbox Code Playgroud)
......不起作用.我怎样才能利用每个人的名字,分配标准?
Laminate_controller:
class LaminatesController < ApplicationController
# GET /laminates
# GET /laminates.json
def index
@laminates = Laminate.all
@standards = Standard.all
respond_to …Run Code Online (Sandbox Code Playgroud) ruby many-to-many views ruby-on-rails has-and-belongs-to-many
我需要制作一个智能菜单,为此我需要一个多对多关系。
我的模型是:
from django.db import models
class Health_plan(models.Model):
a = models.IntegerField ()
b = models.IntegerField ()
class Doctors_list(models.Model):
name = models.CharField(max_length=30)
hp_id = models.ManyToManyField(Health_plan)
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
如何在数据库中建立这种关系?我正在考虑将health_plans(a,b) 作为列,将医生作为行,用 0 和 1 来标识他们所涵盖的健康计划。
有人告诉我这是对 a 的滥用ManyToManyField,我不知道该采取哪一步。
帮助表示赞赏
我的应用程序中有一个 HABTM 关系,如下所示:
class Book < ActiveRecord::Base
has_and_belongs_to_many :authors
end
class Author < ActiveRecord::Base
has_and_belongs_to_many :books
end
Run Code Online (Sandbox Code Playgroud)
在 Rails 控制台中,我可以像这样访问 Book 和 Author 的记录:
Book.all
Book.first
b = Book.first
b.title = "Title2"
b.save
...
Run Code Online (Sandbox Code Playgroud)
但我不知道如何访问连接表。
如何访问和查看连接表中的记录books_authors?
是否可以更改连接表行?
many-to-many join ruby-on-rails rails-console ruby-on-rails-4
我有两个通过多对多领域相关的模型。
class Tires(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
brand = models.CharField(max_length=50)
class Car(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
brand = models.CharField(max_length=50)
tires = models.ManyToManyField('Tires', blank=True)
Run Code Online (Sandbox Code Playgroud)
当我通过管理页面为汽车添加轮胎时它工作正常,但它在我的单元测试中不起作用,我无法弄清楚问题是什么(可能真的很简单)
这是我的单元测试:
def test_many_to_many(self):
tires_1 = Tires(brand='bridgestone')
tires_1.save()
car_1 = Car(brand='BMW')
car_1.save()
car_1.tires.add(tires_1)
car_1.save()
Run Code Online (Sandbox Code Playgroud)
这不会引发任何异常,但是当我打印 car_1.tires 时,它说carthings.Tires.None 我已经尝试过相反的方法,将 car_1 添加到 Tire_1.car_set 但这给出了相同的结果。我还尝试在多对多字段中添加不同类的对象只是为了看看会发生什么,这确实会引发错误。所以看起来添加有效,但它只是不保存或什么?
我可以点击“添加图书”:
但是我需要有机会在我的书中添加作者的名字。所以我创建了新项目,新的 Service Builder 和新实体“作者”,现在我也可以添加作者。但是,当我单击“添加书籍”时,如何使用现有作者制作下拉菜单?如何将该字段与新表 - “作者”绑定?
在我的应用程序中,我有categories,labels 他们都属于products
在管理面板中,用户可以添加产品,创建标签和类别,然后为产品分配类别和标签.
当我创建标签时,名称在标签面板中正确显示(见照片)
问题是标签名称在分配给产品时没有正确显示(见下图),但显示了类别名称.这很奇怪,因为两列都具有相同的设置.
在Admin products panel标签上显示数字Label#1``Label#2等(见下图)
在_navbar.html.erb我有这个代码显示类别和标签...并在那里正确显示.
<ul class="dropdown-menu" role="menu">
<% @categories.each do |category| %>
<li><%= link_to category.name, category %></li>
<% end %>
</ul>
</li>
<li class="dropdown full-width">
<a href="#" class="dropdown-toggle"
data-toggle="dropdown">
Labels
</a>
<ul class="dropdown-menu" role="menu">
<% @labels.each do |label| %>
<li><%= link_to label.label_name, label %></li>
<% end %>
</ul>
</li>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?我看不出为什么标签显示不正确.
有没有人与活动管理员有相同或类似的问题?
谁能看看这个?
提前致谢
这是 app/admin/category.rb
ActiveAdmin.register Category do
permit_params :name
end
Run Code Online (Sandbox Code Playgroud)
在app/admin/label.rb这里有代码:
ActiveAdmin.register …Run Code Online (Sandbox Code Playgroud) 这是我的模型:产品和标签具有多对多关系
products_tags_table=db.Table('products_tags',
db.Column('product_id', db.Integer,db.ForeignKey('products.id'), nullable=False),
db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),nullable=False),
db.PrimaryKeyConstraint('product_id', 'tag_id')
)
class Tag(db.Model):
__tablename__ = "tags"
id = db.Column( db.Integer, primary_key = True)
name = db.Column( db.String(256) )
description = db.Column( db.Text() )
background_img_url = db.Column( db.String(256) )
products =db.relationship('Product',
secondary=products_tags_table,
backref='product_tags'
)
class Product(db.Model):
__tablename__ = "products"
id = db.Column( db.Integer, primary_key = True)
name = db.Column( db.String(256) )
tags=db.relationship('ProductTag',
secondary=products_tags_table,
backref='tag_products'
)
Run Code Online (Sandbox Code Playgroud)
当我加入Tag with Product时.我收到了错误:
class'narlalchemy.exc.InvalidRequestError':找不到要加入的FROM子句.尝试加入,但得到:找不到'product_tags'和'产品'之间的任何外键关系.
这是我的加入代码:
avai_tags = Tag.query.join(Product).order_by(ProductTag.name)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?