比如如何从同一个模型的另一个获取数据? this site通常写作建立模型之间的关系,但在这种情况下不清楚获取数据 可以通过实例咨询书籍或在线资源吗?
示例:
class Foto <ActiveRecord :: Base
belongs_to: action
End
class Action <ActiveRecord :: Base
has_many: foto
end
ActiveRecord :: Schema.define (version: 20151207105829) do
create_table "actions", force:: cascade do | t |
t.text "name"
end
create_table "fotos", force:: cascade do | t |
t.text "fname"
t.integer "action_id"
t.text "image"
end
end
如何获取以下SQL
SELECT * FROM fotos
INNER JOIN actions ON fotos.action_id = actions.id
答案 0 :(得分:1)
这是标准belongs_to/has_many
关系 - 您希望通过数据库引用关联两个模型。
-
您已经完成了艰苦的工作 - 您的数据库中有相关的foreign_key
(action_id
),这意味着您将能够执行以下操作:
#config/routes.rb
resources :actions do
resources :fotos, only: [:new, :create]
end
#app/controllers/fotos_controller.rb
class FotosController < ApplicationController
def new
@action = Action.find params[:action_id]
@foto = @action.fotos.new
end
def create
@action = Action.find params[:action_id]
@foto = @action.fotos.new foto_params
end
private
def foto_params
params.require(:foto).permit(:fname, :image)
end
end
答案 1 :(得分:0)
以下ActiveRecord语句应该为您提供特定操作的照片
Action.find(name: "pass the name here").fotos
或者如果你想以相反的关系遍历
Foto.find(fname: "pass the fname here").action
注意强> 您的关系很重要,因为您需要复制类的名称以相应地获取它们。
答案 2 :(得分:0)
Rich Peck有完全正确的答案。但是他应该补充一点,你可以在创建一些照片后使用@action.fotos
来完成照片。
即。 @action.fotos
将存储属于某些@action的所有照片,并与
SELECT * FROM fotos
INNER JOIN actions ON fotos.action_id = actions.id