1

ここでは、user.idをparamsddとして送信します

<h3><%= link_to("Lend Asset", {:controller => 'empassets', :action=> 'index', :dd => user.id})%></h3>

コントローラーエンパッセットでは、

  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

すべての新しいshoweditメソッドでこの@idが必要です。しかし、私がインデックスで言及しているように、それはインデックスのみを取り入れます。Lendアセットがクリックされた場合、@ id = params [:id]がすべてのメソッドで値を持つようにするにはどうすればよいですか。別の@id=params [:id]がそのコントローラーで送信されないようにするにはどうすればよいですか?

4

3 に答える 3

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

遅れて申し訳ありません。

于 2012-11-05T13:23:02.897 に答える
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
于 2012-11-05T11:36:57.920 に答える
0

セッションに保存したくない場合を除き、コントローラーのすべてのメソッドで @id を自動的に使用できるようにする方法はありません。ただし、次のように各リンク/フォームにパラメーターを追加できます。

<%= link_to("New Asset", {:controller => 'empassets', :action=> 'new', :dd => @id})%>

<%= link_to("Show Asset", {:controller => 'empassets', :action=> 'show', :dd => @id})%>

これらのリンクは index ビューにあり@id、index メソッドで設定されます。

ここでの目標が何であるかは正確にはわかりませんが、このようなものがうまくいくかもしれません。

于 2012-11-05T11:10:51.083 に答える