Ruby on rails Rails 4将数据从控制器传递到模型属性访问器

Ruby on rails Rails 4将数据从控制器传递到模型属性访问器,ruby-on-rails,Ruby On Rails,好的,我很困惑,有点困在这里,我试图通过attr_访问器将数据传递给我的模型,但我找不到正确的方法。以下是我目前的设置: class ApplicationController

好的,我很困惑,有点困在这里,我试图通过attr_访问器将数据传递给我的模型,但我找不到正确的方法。以下是我目前的设置:

class ApplicationController

现在我如何在我的模型中设置
@current_league
?我知道我的模型中可以有一个
attr\u访问器
,但这只适用于此模型的一个实例,但就我所知,索引操作不会创建实例。也许有人能给我指出正确的方向。提前感谢。

变量
@heros
是英雄实例的集合。你可以在它们之间循环,如果你想设置的话

class HerosController < ApplicationController
  def index
    @heros = Hero.all.order(:name).each do |hero|
      hero.current_league = current_league
    end
  end
end
然后可以在控制器内创建以下对象:

class HerosController < ApplicationController
  def index
    @heros_in_league = Hero.all.order(:name).map { |hero|
      HeroInLeague.new(current_league, hero)
    }
  end
end
class HerosController
现在,您已经为与英雄和联盟的组合相关的方法创建了一个位置。为什么这很重要?好吧,在前面的方法中,你可能会在没有当前联盟的情况下,使用对英雄没有任何意义的方法。(如
some_方法
方法)。这让英雄班有点混乱。现在,您已经创建了一个放置
some\u method
及其所有朋友的位置


您可以使用来使英雄队的界面更加友好,这样您就不必在英雄队中使用英雄队,但是可以直接调用联盟中的英雄。foo

你已经在私有区域下的app controller中写下了这个方法,所以我知道它只能在所有控制器中使用,因为所有控制器都是从app controller继承的,所以在模型中使用这个方法是wring。请检查我的编辑,如你所见,当列出所有英雄时,我希望它在索引视图中显示
some\u方法
。不建议从您的模型调用控制器助手。我不想调用助手,我希望在我的模型中提供
@current\u league
,不要被我的模型和控制器中相同的命名所迷惑。第一个答案看起来很有希望,但我刚刚测试了它,它看起来不会设置当前联盟
,因为如果我将当前联盟
放在每个do | hero |中,它不会输出任何东西,如果我把它放在每个循环之外,它会输出当前的
联盟
,这是因为
put
会把东西发送到STDOUT。在执行IRB时,需要使用返回值。
put
的返回值总是
nil
。我不在IRB中,我现在有@heros=Hero.all.order(:name)do | Hero | Hero.current_-league=current_-league end,在我的模型中的some_方法中我有当前的put _-league,但它在我的服务器中没有输出任何东西对不起,我是指ERB,不是IRB。我的意思是:
将计算为
,然后读取
,这样它就不会输出任何内容。另外,您忘记了该代码中的
每个
,因此该块永远不会被调用,因此永远不会设置当前的联盟。啊,每个人都做到了:D谢谢,有时小事情会带来不同,现在它就像我期望的那样工作:)
class HerosController < ApplicationController
  def index
    @heros_in_league = Hero.all.order(:name).map { |hero|
      HeroInLeague.new(current_league, hero)
    }
  end
end