Ruby on rails Rails 3:alias\u方法\u首先设置特定属性
当用户创建帖子时,我想先设置user_id属性。我正在尝试使用arrtibutes方法上的alias_方法_链来实现这一点。但我不确定这是否正确,因为我认为这将解决的问题仍在发生。这是正确的吗 编辑: 当我的用户创建帖子时,他们使用一个名为“艺术家令牌”的虚拟属性将“艺术家”分配给每个帖子。我将这些关系存储在一个艺术家模型和一个艺术家ID和后期ID(称为Artisships)的连接表中 我还想存储创建属于他们帖子的艺术家的用户id,我希望它位于艺术家模型本身,因此我在艺术家模型上有一个用户id列 问题是,当我为每个帖子创建艺术家并尝试插入帖子创建者的用户id时,用户id始终显示为空。这很可能是因为帖子的user_id属性尚未设置 我想,为了解决这个问题,我需要先设置帖子的user_id属性,然后让其余属性按正常情况设置。这就是我发现别名\u方法\u链的地方 post.rb 编辑:Ruby on rails Rails 3:alias\u方法\u首先设置特定属性,ruby-on-rails,ruby-on-rails-3,methods,Ruby On Rails,Ruby On Rails 3,Methods,当用户创建帖子时,我想先设置user_id属性。我正在尝试使用arrtibutes方法上的alias_方法_链来实现这一点。但我不确定这是否正确,因为我认为这将解决的问题仍在发生。这是正确的吗 编辑: 当我的用户创建帖子时,他们使用一个名为“艺术家令牌”的虚拟属性将“艺术家”分配给每个帖子。我将这些关系存储在一个艺术家模型和一个艺术家ID和后期ID(称为Artisships)的连接表中 我还想存储创建属于他们帖子的艺术家的用户id,我希望它位于艺术家模型本身,因此我在艺术家模型上有一个用户id列
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
在控制器中,为什么不这样做:
def create
@post = Post.new :user_id => params[:post][:user_id]
@post.update_attributes params[:post]
...
end
但在我看来,在对帖子进行验证之后创建艺术家记录要比第一次指定属性时好得多
编辑
我会将此更改为如下回调:
class Post < ActiveRecord::Base
attr_accessor :author_tokens
def artist_tokens=(tokens)
@artist_tokens = tokens.split(',')
end
after_save :create_artists
def create_artists
@artist_tokens.each do |token|
...
end
end
end
这似乎不合适。你到底想做什么?类似于user.posts.build的内容?经过编辑以显示有关我正在尝试执行的操作的更多信息。使用@post=user.posts.buildparams[:post]?如何准确地工作?要在之后创建艺术家,回调将是什么样子?我很困惑如何获得艺术家令牌数据,请记住,有时艺术家需要创建,有时它已经存在于数据库中。我在上面添加了我的artist controller,因此您可以看到我如何使用artist_令牌中的ID,这是railscast 258中的一个扩展jquery令牌输入设置,用于创建新令牌感谢帮助,但我意识到,因为我有一个艺术家id和帖子id的联接表,当我创建帖子时,会填充该表,我需要艺术家的id,这就是为什么我在艺术家令牌方法中创建了它,并将.id添加到了艺术家的末尾。创建!并使用它设置帖子的self.artist_id。您如何看待添加的动态?在这种情况下,您希望将回调从保存后切换到保存前。
class Post < ActiveRecord::Base
attr_accessor :author_tokens
def artist_tokens=(tokens)
@artist_tokens = tokens.split(',')
end
after_save :create_artists
def create_artists
@artist_tokens.each do |token|
...
end
end
end