【发布时间】:2011-07-15 00:00:47
【问题描述】:
当用户创建帖子时,我想先设置 user_id 属性。我正在尝试在 arrtibutes 方法上使用 alias_method_chain 来做到这一点。但我不确定这是否正确,因为我认为可以解决的问题仍在发生。这个对吗?
编辑:
当我的用户创建帖子时,他们使用名为“artist_tokens”的虚拟属性将“艺术家”分配给每个帖子。我将关系存储在一个艺术家模型和一个名为 artisanships 的艺术家 ID 和 post_id 的连接表中。
我还想存储创建属于他们帖子的艺术家的用户 ID(我希望它在艺术家模型本身中),所以我在艺术家模型上有一个 user_id 列。
问题是当我为每个帖子创建艺术家并尝试插入帖子创建者的 user_id 时,user_id 一直显示为 NULL。这很可能是因为帖子的 user_id 属性尚未设置。
我想解决这个问题,我需要先设置帖子的 user_id 属性,然后让其余属性照常设置。这是我找到 alias_method_chain 的地方。
post.rb
attr_reader :artist_tokens
def artist_tokens=(ids)
ids.gsub!(/CREATE_(.+?)_END/) do
Artist.create!(:name => $1, :user_id => self.user_id).id
end
self.artist_ids = ids.split(",")
end
def attributes_with_user_id_first=(attributes = {})
if attributes.include?(:user_id)
self.user_id = attributes.delete(:user_id)
end
self.attributes_without_user_id_first = attributes
end
alias_method_chain :attributes=, :user_id_first
编辑:
class ArtistsController < ApplicationController
def index
@artists = Artist.where("name like ?", "%#{params[:q]}%")
results = @artists.map(&:attributes)
results << {:name => "Add: #{params[:q]}", :id => "CREATE_#{params[:q]}_END"}
respond_to do |format|
format.html
format.json { render :json => results }
end
end
【问题讨论】:
-
这似乎不合适。你到底想做什么?
user.posts.build之类的东西? -
已编辑以显示有关我正在尝试做的事情的更多信息。
标签: ruby-on-rails ruby-on-rails-3 methods