Rails:find_by_name和current_user.id

时间:2012-02-03 16:03:36

标签: ruby-on-rails ruby-on-rails-3

我对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)

1 个答案:

答案 0 :(得分:1)

我认为问题是您无法在模型中使用helper_method。 尝试将其传递给方法参数,如

def mood_name=(name, user)
   self.mood = Mood.find_by_name_and_user_id(name, user.id)
end

然后传递current_user您调用此方法的地方