Передача значений в контроллеры - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь разрешить пользователям «любимые» ссылки (то есть создать новую запись Favorite с их user_id и link_id). Это то, что у меня есть до сих пор ..

Когда я щелкаю избранное (как пользователь), новая запись назначается user_id, но поле link_id равно nil. Как я могу передать link_id в мой FavoritesController?

Код моего просмотра

Добавлено Код модели связи

class FavoritesController < ApplicationController
  def create
    @user = User.find(session[:user_id])
    @favorite = @user.favorites.create :link_id => params[:id]
    redirect_to :back
  end
end 

Модель Favorite относится к :user и :link

Примечание: я также пытался это , но когда я нажимаю «избранное», появляется ошибка «Не удалось найти ссылку без идентификатора».

Обновление

<%= link_to "Favorite", :controller => :favorites, :action => :create, :link_id => link.id %> 

с

class FavoritesController < ApplicationController
  def create
    @user = User.find(session[:user_id])
    @favorite = @user.favorites.create :link_id => :params[:link_id]
    redirect_to :back
  end
end

Возвращает "невозможно преобразовать символ в целое число"

app/controllers/favorites_controller.rb:4:in []
app/controllers/favorites_controller.rb:4:in create

Я пытался заставить его целое число несколькими способами с .to_i

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Вы можете попробовать следующее

На ваш взгляд:

<%= link_to "Favorite", :controller => :favorites, :action => :create, :link_id => link.id %> 

В вашем контроллере:

class FavoritesController < ApplicationController
  def create
    @user = User.find(:first, :conditions => ["id = ?", session[:id]])
    @favorite = @user.favorites.create
    @favorite.update_attributes(:link_id => params[:link_id])
    redirect_to :back
  end
end 

Как примечание, при поиске записей я обычно использую:

.find(:first, :conditions => ["id = ?", session[:id]])

, поскольку он избегает большинства материалов, отправленных пользователем, и возвращает одну запись.

Я разбил шаги в вашем контроллере, но вы могли бы объединить их в один такой:

def create
    @user = User.find(:first, :conditions => ["id = ?", session[:id]])
    @favorite = @user.favorites.create(:link_id => params[:link_id])
    redirect_to :back
end

надеюсь, это должно сработать

0 голосов
/ 24 ноября 2011

Сбой, потому что params [: id] равен нулю.Поместите

throw params

в начале метода создания и проверьте, что у вас там есть.Пожалуйста, передайте также код на ваш взгляд.

0 голосов
/ 24 ноября 2011

Вы должны попробовать:

@user = User.find(session[:user_id])

@favorite = Favorite.create :link_id => params[:id]

@favorite.user = @user
...