我对find_by_name有一个附加条件的问题 - curent_user.id。
例如,我有模特:User,Mood和Post。 一个用户有许多情绪,一个情绪只有一个用户。心情名称不是唯一的。
当用户输入帖子时,他可以输入(使用自动填充)并选择他的心情,但只能由他自己创建。
现在我有了这个(这部分效果很好):
<%= f.text_field :mood_name, {"data-provide"=>"some_autocomplete_script", "data-source"=>"#{Mood.where(:user_id => current_user.id).collect {|x| x.name}}"} %>
我的帖子模型有:
def mood_name
mood.try(:name)
end
def mood_name=(name)
self.mood = Mood.find_by_name(name)
end
那么,我怎样才能找到记录by_name和current_user.id?不只是名称,名称在表格中不是唯一的,但每个用户都是唯一的。
PS。当前用户在application_controller中定义:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
PPS。心情有user_id列,与帖子相同。 我的表格:
<%= form_for(@post) do |f| %>
<%= f.text_field :somecontent %>
<%= f.text_field :mood_name, {"data-provide"=>"some_autocomplete_script", "data-source"=>"#{Mood.where(:user_id => current_user.id).collect {|x| x.name}}"} %>
<%= f.submit %>
<% end %>
我的post_controller:
def new
@post = Post.new
end
def create
@post = Post.new(params[:post])
@post.user_id = current_user.id
respond_to do |format|
if @post.save
#save actions
else
# else :)
end
end
end
和关系:
One user has many posts and many moods
Every mood has one user and many posts (user_id)
Every post has one user and one mood (user_id and mood_id)
答案 0 :(得分:1)
我认为问题是您无法在模型中使用helper_method。 尝试将其传递给方法参数,如
def mood_name=(name, user)
self.mood = Mood.find_by_name_and_user_id(name, user.id)
end
然后传递current_user
您调用此方法的地方