Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器中的继承_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 控制器中的继承

Ruby on rails 控制器中的继承,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在模型中使用继承。事件有不同的类型: Event < activity Event < training Event < game 我想避免写@game.user\u id=session[:user\u id]。。。在活动、游戏和训练控制器中的每种创建方法中 有人知道如何做到最好 谢谢也许您正在寻找驻留在ApplicationController中的before\u筛选器?然后,在每个控制器中,您可以将before_过滤器设置为在创建操作上运行 ApplicationCo

我在模型中使用继承。事件有不同的类型:

Event < activity
Event < training
Event < game
我想避免写@game.user\u id=session[:user\u id]。。。在活动、游戏和训练控制器中的每种创建方法中

有人知道如何做到最好


谢谢

也许您正在寻找驻留在ApplicationController中的before\u筛选器?然后,在每个控制器中,您可以将before_过滤器设置为在创建操作上运行

ApplicationController
  def set_user_ids
    game.user_id = session[:user_id]
    training.user_id = session[:user_id]
    activity.user_id = session[:user_id]
  end
  ...
end

OneController < ApplicationController
  before_filter :set_user_ids, :only => [:create]
  ...
end

TwoController < ApplicationController
  before_filter :set_user_ids, :only => [:create]
  ...
end
ApplicationController
def设置用户ID
game.user\u id=会话[:user\u id]
training.user\u id=会话[:user\u id]
activity.user\u id=会话[:user\u id]
结束
...
结束
OneController<应用程序控制器
在\u筛选器之前:设置\u用户\u ID,:only=>[:create]
...
结束
TwoController<应用程序控制器
在\u筛选器之前:设置\u用户\u ID,:only=>[:create]
...
结束

也许您正在寻找驻留在ApplicationController中的before\u筛选器?然后,在每个控制器中,您可以将before_过滤器设置为在创建操作上运行

ApplicationController
  def set_user_ids
    game.user_id = session[:user_id]
    training.user_id = session[:user_id]
    activity.user_id = session[:user_id]
  end
  ...
end

OneController < ApplicationController
  before_filter :set_user_ids, :only => [:create]
  ...
end

TwoController < ApplicationController
  before_filter :set_user_ids, :only => [:create]
  ...
end
ApplicationController
def设置用户ID
game.user\u id=会话[:user\u id]
training.user\u id=会话[:user\u id]
activity.user\u id=会话[:user\u id]
结束
...
结束
OneController<应用程序控制器
在\u筛选器之前:设置\u用户\u ID,:only=>[:create]
...
结束
TwoController<应用程序控制器
在\u筛选器之前:设置\u用户\u ID,:only=>[:create]
...
结束

不要使用game.user\u id,您可以这样做:

game = current_user.games.build(params[:game])
if game.save
  # do something
else
  # do something else
end
对其他控制器也重复此操作


也可能有帮助。

不要使用game.user\u id,您可以这样做:

game = current_user.games.build(params[:game])
if game.save
  # do something
else
  # do something else
end
对其他控制器也重复此操作


这可能也有帮助。

通常,您会希望使用Rails提供的内置作用域。为了充实@Radar已经发布的内容:

class ApplicationController < ActionController::Base
  before_filter :find_current_user

  private
    def find_current_user
      @current_user = User.find( session[:user_id] )
    end
end

class EventsController < ApplicationController
  def create
    @event = @current_user.events.build( params[:event] )
    @event.save!
  end
end
如果您需要限制用户可以查看或编辑的内容,这也是一种非常方便的机制:

class EventsController < ApplicationController
  def index
    @events = @current_user.events # only fetch current users events
  end

  def update
    @event = @current_user.events.find( params[:id] ) # can't update other user's events
    @event.update_attributes!( params[:event] )
  end
end
类事件控制器
通常,您需要使用Rails提供的内置作用域。为了充实@Radar已经发布的内容:

class ApplicationController < ActionController::Base
  before_filter :find_current_user

  private
    def find_current_user
      @current_user = User.find( session[:user_id] )
    end
end

class EventsController < ApplicationController
  def create
    @event = @current_user.events.build( params[:event] )
    @event.save!
  end
end
如果您需要限制用户可以查看或编辑的内容,这也是一种非常方便的机制:

class EventsController < ApplicationController
  def index
    @events = @current_user.events # only fetch current users events
  end

  def update
    @event = @current_user.events.find( params[:id] ) # can't update other user's events
    @event.update_attributes!( params[:event] )
  end
end
类事件控制器
stackoverflow在收到新答案时向您显示警报,这很好,因为我刚刚输入了相同的解决方案。您还可以通过执行[game,training,activity]来减少代码重复。每个{event | event.user|id=session[:user|id]}.我也很想把它放在应用程序控制器中,但我觉得这段代码应该限制在与事件相关的控制器中。我更愿意在事件控制器中创建一个方法,然后使用另一个控制器的before过滤器调用它。我不知道这是否可行?很高兴stackoverflow在收到新答案时向您显示警报,因为我刚刚输入了相同的解决方案。您还可以通过执行[game,training,activity]来减少代码重复。每个{event | event.user_id=session[:user_id]}.我也很想把它放在应用程序控制器中,但我觉得这段代码应该限制在与事件相关的控制器中。我更愿意在事件控制器中创建一个方法,然后使用另一个控制器的before过滤器调用它。我不知道这是否可行?继承语法不是你问题的第一位吗?(我假设它们都是从事件中继承的?)您的问题的顶部不是继承语法吗?(我假设它们都继承自事件?)当我执行game=current_user.games.build(params[:game])时,会得到一个NoMethodError(未定义的方法“games”用于#):class Game