这里我将user.id发送为params dd
<h3><%= link_to("Lend Asset", {:controller => 'empassets', :action=> 'index', :dd => user.id})%></h3>
在控制器empassets中,我通过
获取它 def index
@id = params[:dd]
@empassets = Empasset.where(:ad => @id)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @empassets }
end
end
def show
@id = params[:dd]
@empasset = Empasset.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @empasset }
end
end
def new
@id = params[:dd]
@empasset = Empasset.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @empasset }
end
end
def edit
@id = params[:dd]
@empasset = Empasset.find(params[:id])
end
我在所有新的节目编辑方法中都需要这个@id。但它仅在我在索引中提及它时才需要索引。如何点击Lend资产,那么@ id = params [:id]在所有方法中都有价值。怎么可能让它可用于另一个@id = params [:id]不在该控制器中发送?
答案 0 :(得分:4)
如果将当前用户存储在会话中并在此之后,使用控制器中的过滤器捕获用户模型可能会更好,如下所示:
# controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_current_user_in_model
private
def current_user
@current_user ||= User.find(params[:dd]) || User.new
end
# This method save the current user in the user model, this is useful to have access to the current user from a model and not from the controller only
def set_current_user_in_model
User.current_user current_user if not current_user.nil?
end
end
# models/user.rb
class User < ActiveRecord::Base
#...
# This is useful to get the current user inside a model
def self.current_user(user = nil)
@@current_user = (user || @@current_user)
end
#...
end
基本上,我的想法是将信息存储在带有过滤器的模型中,如果您想获取信息(用户ID),可以使用会话。
def index
session[:user_id] = params[:dd]
@empassets = Empasset.where(:ad => session[:user_id])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @empassets }
end
end
def show
@empasset = Empasset.find(session[:user_id] || params[:dd])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @empasset }
end
end
注意我使用session[:user_id] || params[:dd]
因为可能会话信息没有建立,你给它:dd
参数。但是如果你想要建立@id
变量,你可以像以前一样使用过滤器。
但我不知道主要问题是什么。
修改强>
# controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_dd_param, :except => :index
def index
session[:dd] = params[:dd] # Here you write the session
@current_user ||= User.find(params[:dd]) || User.new
end
# ...
protected
def set_dd_param
params[:dd] = session[:dd] || -1 # Here you read the session a write the params variable
end
end
抱歉延误。
答案 1 :(得分:0)
除非您想将它存储到会话中,否则无法自动使@id可用于控制器中的每个方法..但您可以将param添加到每个链接/表单中,如下所示:
<%= link_to("New Asset", {:controller => 'empassets', :action=> 'new', :dd => @id})%>
<%= link_to("Show Asset", {:controller => 'empassets', :action=> 'show', :dd => @id})%>
这些链接位于索引视图中,@id
在索引方法中设置。
不完全确定目标是什么,但这样的事情可能有用。
答案 2 :(得分:0)
def index
$id = params[:dd]
@empassets = Empasset.where(:ad => @id)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @empassets }
end