我有以下课程:
class VideoChannel < ActiveRecord::Base
#Associations
belongs_to :video_playlist, :dependent => :destroy
VideoChannel.video_playlist_name
delegate :name, :id, :list_type, :list_id, :manual, :to => :video_playlist, :prefix => true
#validations
validates_presence_of :name
#After Functions
def after_create
video_playlist = VideoPlaylist.new(:name => self.name,
:list_type => "VideoChannel",
:list_id => self.id)
video_playlist.save
end
并且:
class VideoPlaylist < ActiveRecord::Base
belongs_to :list, :polymorphic => true
has_many :video_channels, :dependent => :destroy
delegate :name, :id, :description, :to => :video_channel, :prefix => true
end
我正在尝试使用Rails委托功能在VideoChannel页面中创建一个链接,该链接允许我链接到视频播放列表并编辑其中的内容。因此,关联就在那里,您可以通过浏览播放列表部分来编辑播放列表,但我们希望将它们组合在一起。我似乎无法弄清楚这一点。我也是Rails的新手,仍在通过指南等工作。
编辑:这是视图代码
<%= link_to '<span class="pen icon"></span>Edit',
content_url(:controller =>"video_playlists", :id => channel.video_playlist_id, :action => "edit"),
:class => "button right" %>
以下是控制器的相关部分:
class VideoChannelsController < ApplicationController
# GET /videochannels
# GET /videochannels.xml
def index
@video_channels = VideoChannel.roots(:order => 'order_num')
@video_channels_parents = @video_channels.group_by {:parent_id}
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @video_channels }
end
end
# GET /videochannels/1
# GET /videochannels/1.xml
def show
@video_channel = VideoChannel.find(params[:id], :order => 'order_num')
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @video_channel }
end
end
端
class VideoPlaylistsController < ApplicationController
# GET /video_playlists
# GET /video_playlists.xml
def index
if !params[:with].nil?
@video_playlists = VideoPlaylist.find(:all, :conditions => {:list_type => 'VideoShow'})
else
@video_playlists = VideoPlaylist.find(:all, :conditions => {:list_type => 'Section'})
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @video_playlists }
end
end
# GET /video_playlists/1
# GET /video_playlists/1.xml
def show
@video_playlist = VideoPlaylist.find(params[:id], :include => [{:video_video_playlists => :video}, {:videos => :asset}, {:videos => :content_image}])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @video_playlist }
end
end
end
答案 0 :(得分:0)
该行在哪里
VideoChannel.video_playlist_name
来自?它在做什么?你也在类上调用一个方法而不是一个实例(有点像 - Ruby不是这样,但它足以解释)。
反正:
委托真的是为了避免像这样的大量火车残骸代码:
fred.jim.bill.xxx
你说他们彼此属于 - 这种关系看起来像是错误的方式。为什么要从孩子内部创建父母?你将如何拥有属于给定播放列表的许多视频频道?
我认为您需要查看构建和关系名称。为了解决你的模型可能会误解您的模型,我们可以切换到具有许多库存项目的产品:
class Product < ActiveRecord::Base
has_many :stock_items
end
class StockItem < ActiveRecord::Base
belongs_to :product
end
这意味着stock_item将包含product_id列。
所以,假设您正在创建一个类似的产品:
product.stock_items.build # :whatever the params are required
这会自动为您设置ID,这意味着您无需设置ID。然后,当你执行product.save时,它也会保存所有相关的库存项目。
在这个玩具模型的视图中,如果您正在显示其中一个库存商品,那么您将使用委托在视图中显示产品的名称,而不必丢失stock_item.product.name(例如)。
我希望这会有所帮助。