Rails: find_by_name и current_user.id - PullRequest
       0

Rails: find_by_name и current_user.id

1 голос
/ 03 февраля 2012

У меня вопрос о 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

Итак, как мне найти запись по имени и по current_user.id?Не только по имени, имя не является уникальным в таблице, но оно уникально для каждого пользователя.

пс.Текущий пользователь определен в 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 %>

Мой пост_контроллер:

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 Ответ

1 голос
/ 03 февраля 2012

Я думаю, проблема в том, что вы не можете использовать helper_method в модели.Попробуйте передать его через параметры метода, такие как

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

Затем передайте current_user, где вы вызываете этот метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...