我知道Rails不支持嵌套的has_many:通过关系,虽然早在Rails 2之前就有关于补丁的谈话和开放票.
我确实遇到了一个非常光滑的插件,但是主分支机构不能与Rails 3一起工作,我对于在应用程序中使用它来完成任务关键任务犹豫不决,因此最近缺乏活跃的开发.那么 - 处理这些关系的最佳方式是什么?
class Author < ActiveRecord::Base
has_many :contracts
has_many :products, :through => :contracts
class Product < ActiveRecord::Base
has_many :contracts
has_many :orders
has_many :authors, :through => :contracts
class Contracts < ActiveRecord::Base
belongs_to :author
belongs_to :product
Run Code Online (Sandbox Code Playgroud)
所以,通过将其添加到Author模型,能够获得订单将会很棒.
has_many :orders, :through => :products
Run Code Online (Sandbox Code Playgroud)
但是,唉,你不能 - 至少没有插件.所以,我的问题是,当唯一关联是在连接模型,合同之间时,访问所有作者订单的最佳方法是什么?
我正在尝试创建几个模型,所有模型都来自同一个表.如何限制每个模型中的表记录?在你告诉我改变我的数据结构之前,这是一个报告应用程序,它从一个我无法控制的预先存在的后备数据库中提取.
我的表看起来像:
Vehicle_Table
id vehicle_type name
--------------------
1 Car Foo
2 Car Bar
3 Motorcycle Baz
4 Car Barf
Run Code Online (Sandbox Code Playgroud)
我想为汽车和摩托车建造模型,如:
class Car < ActiveRecord::Base
set_table_name 'Vehicle_Table'
end
Run Code Online (Sandbox Code Playgroud)
和
class Motorcycle < ActiveRecord::Base
set_table_name 'Vehicle_Table'
end
Run Code Online (Sandbox Code Playgroud)
但是我不知道怎么说,"嘿活跃唱片,我只想要记录里面的车辆类型=摩托车模型中的摩托车."
我确信这很明显,但我的所有Google搜索都会返回模型中FIND子集的方式,而不是将模型限制为特定的记录子集.
我正在开发我的第一个 Rails 应用程序。它需要存储有关将出现在每个页面上的单个广告的一些信息。管理员只需要能够设置 URL、标题和图像。显然,我只需要这个广告对象的一个实例。
我创建了一个从 ActiveRecod::Base 继承的模型,但这似乎是错误的做法,因为它被配置为在数据库表中保存多个广告。
我这样做的最佳方法是什么?模型和控制器应该是什么样的?
提前致谢,阿维
我有一些这样的模型:
class Alpha < ActiveRecord::Base
has_many :items
end
class Beta < ActiveRecord::Base
has_many :items
end
class Item < ActiveRecord::Base
belongs_to :alpha
belongs_to :beta
end
Run Code Online (Sandbox Code Playgroud)
但我希望每个数据库记录中的Item模型属于:alpha或a:beta但不是两者.在Rails 3中做任何好方法吗?或者我应该使用AlphaItems和BetaItems对其进行建模?
我有一个ActiveRecord模型Media这应该能够存储有关不同类型的媒体(类似结构化信息Media::Book,Media::Movie,Media::Music).但是,每个子类都有独特的方法.
# TABLE medias
# string :title
# string :description
# integer :media_type
class Media < ActiveRecord::Base
end
class Media
class Book < Media
def reviews
GoogleBooks.search(name).get_reviews
end
end
class Movie < Media
def reviews
IMDB.search_movies(name).reviews
end
end
class Music < Media
def reviews
Lastfm.search(name).comments
end
def music_video
Youtube.search(name).first.embed_html
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果我使用Media::Book.new("Harry Potter").reviews,这将有效,但我希望能够使用
Media.find("Harry Potter")
=> Media::Book
Run Code Online (Sandbox Code Playgroud)
和
Media.find("Harry Potter").reviews
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用media_type来实现这一点,但我不知道,如果那里有一个更好的方式来做到这一点不是覆盖每一个ActiveRecord的数据库接口方法(User.medias,find,find_by_etc, …
我将使用StackOverflow作为我的例子.假设我有一个Question模型.登录用户可以" Question标记"a 标记为他们的最爱之一.在数据库中,这种东西可能存储在UserQuestions带有user_id字段和question_id字段的表中.这种功能不是典型的CRUD,因为实际上只有"list","add"和"delete"."用户加星标的问题"列表中显示的记录也不应是UserQuestion记录,而应是Question记录.我在控制器和UserQuestion模型中放了什么代码?
class MyFavoriteQuestionsController < ApplicationController
def index
#list just the questions associated with current_user
end
def add
#insert a row in the database for current_user and selected question
def
def remove
#remove the row from the database
end
end
Run Code Online (Sandbox Code Playgroud) 最近我从django开发转换为全时轨道工作,这是一个相当小的商店,我正在从书本中随手拿起东西.
上周,当我了解到rails的模型没有镜像数据库中的内容时,我的心理模型受到重创.
请参阅差异示例:http://www.peterkrantz.com/2009/rails-grails-django-models/
我很好奇的是,我如何不断修改模型以支持新的数据类型和关系?
另外,有没有办法在模型文件中显示特定类的表中的所有属性?
谢谢
类似于nodejs的mongoose如何具有枚举验证器,其中字段的值必须是预定义数组中的值之一,Rails中的mongoid模型将如何复制此行为?
即.
field :category, type: String --> must be in one of [categoryA, categoryB, categoryC]
Run Code Online (Sandbox Code Playgroud) 好吧,我知道这是对萨斯当然,人们一直在问有关那还有问题,但我花了很多时间试图与阅读和我被困.首先,当你有一个叫做电影模式,是它更好地使用评级为模型,并将其关联或只是保持在一个阵列的浮动空间等级(!).其次,这是我现在在控制器中的内容:
def index
@movies = Movie.where(params[:ratings].present? ? {:rating => (params[:ratings].keys)} : {}).order(params[:sort])
@sort = params[:sort]
@ratings = Ratings.all
end
Run Code Online (Sandbox Code Playgroud)
现在,我决定创建一个评级模型,因为我认为它会更好.这是我的观点:
= form_tag movies_path, :method => :get do
Include:
- @ratings.each do |rating|
= rating.rating
= check_box_tag "ratings[#{rating.rating}]"
= submit_tag "Refresh"
Run Code Online (Sandbox Code Playgroud)
我尝试了一些与在复选框标签内使用条件三元组相关的所有内容,以".include?(评级)结尾?"真:""我尝试了所有应该工作的但却没有.我不想要确切的答案,我只需要指导.谢谢!
更新(控制器的方法):
这是我的控制器中读取此哈希的索引方法 - 为清楚起见.我为之前的模糊道歉.
def index
@all_stores = Product.all_stores
@selected_stores = params[:stores] || session[:stores] || {}
if @selected_stores == {}
@selected_stores = Hash[@all_stores.map {|store| [store, store]}]
end
if params[:stores] != session[:stores]
# session[:stores] = @selected_stores
session[:stores] = params[:stores]
redirect_to …Run Code Online (Sandbox Code Playgroud) 我想访问从OtherModel.rb到MyModel.rb的列.那可能吗?
如果我想要访问的数据位于模型中,那就是它的样子.这很好用
//MyModel.rb
def to_param
self.name
end
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从其他模型访问数据.这是我想要的一个例子:
//MyModel.rb
def to_param
OtherModel.name
end
Run Code Online (Sandbox Code Playgroud)