将值传递给控制器

时间:2011-11-24 16:57:21

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller

我正在尝试允许用户“收藏”链接(也就是说,使用Favoriteuser_id创建新的link_id记录。这是我到目前为止所拥有的..

当我点击收藏夹(作为用户)时,新记录将分配给user_id,但link_id字段为nil。如何将link_id传递给我的FavoritesController

My View Code

已添加 Link Model Code

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

注意:我也尝试了this但是当我点击“收藏”时,会出现“无法找到没有ID的链接”的错误。

更新

<%= 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 个答案:

答案 0 :(得分:2)

您可以尝试以下

在您的观点中:

<%= 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

希望这应该有用

答案 1 :(得分:0)

你应该尝试:

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

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

@favorite.user = @user

答案 2 :(得分:0)

失败因为params [:id]为零。把

throw params

在create方法的开头,检查那里有什么。请点击你视图中的代码。