Устранение неполадок при создании новой записи в Rails с использованием Ajax - PullRequest
1 голос
/ 09 августа 2010

Я внедряю функцию «Избранное» в приложение блога сообщества и хотел бы использовать Ajax.

Когда пользователям нравится публикация на главной странице, есть символ «+», который они могут щелкнуть, чтобы добавить это сообщение в свою коллекцию избранных.

Эта функция прекрасно работает без функции Ajax. Но сейчас я добавляю Ajax.

По виду:

<span id="favorite_<%= entry.id %>">
  <%= link_to_remote "+",  :url => { :action => 'add_favorite' },
                           :entry => entry.id,
                           :user => session[:user_id],
                           :update => 'favorite_' + entry.id.to_s %>
</span>

Соответствующее действие контроллера:

def add_favorite
  @favorite = Favorite.new(:entry_id => :entry, :user_id => :user)
  if @favorite.save
    render :text => "added to favorites", :layout => false
  end
end

Текст отображается соответствующим образом в представлении, как будто действие сработало. Но когда я проверяю список избранного, он не был добавлен.

Я провел линию

@favorite = Favorite.new(:entry_id => :entry, :user_id => :user)

в интерактивной оболочке и все было хорошо. Все сохранено.

Что я пропускаю / делаю неправильно?

1 Ответ

0 голосов
/ 09 августа 2010

По какой-то причине вы передаете символы вместо переменных, поэтому вы, вероятно, получаете запись без назначенных значений и, следовательно, без ассоциации:

@favorite = Favorite.new(:entry_id => params[:entry_id], :user_id => params[:user_id])

Это должно обрабатывать связывание ассоциаций, если у вас определено belongs_to.

Имейте в виду, что :user_id - это просто символ, не более того, где user_id - это переменная, а params[:user_id] - это параметр, который мог быть передан. Символы часто используются в качестве хэш-ключей, потому что они очень легкий и простой в сравнении.

Для согласованности попробуйте ввести параметры типа _id с _id в конце. В этом случае это будет:

<%= link_to_remote "+",
     :url => { :action => 'add_favorite' },
     :entry_id => entry.id,
     :user_id => session[:user_id],
     :update => 'favorite_' + entry.id.to_s
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...