我有一个名为 Complaign
的模型,它具有一些其他属性以及投诉日期 (c_date
)。
在 ComplaignController
中,我有一个 index
View ,它显示所有的 complaigns
。有一个从日期到日期的过滤器。过滤后,它工作正常,并正确显示在这些日期触发的投诉。
现在我希望将此查询的结果传递给不同的方法,比如导出方法。
我想从索引 View 中传递它,因为它存储在 @complaigns
中。
这是我的索引方法:
def index
if params[:from] && params[:to]
from = params[:from].to_date
to = params[:to].to_date
@complaigns = Complaigns.where(:c_date => from..to)
else
@complaigns = Complaigns.all
end
end
在索引 View 中,我是这样写的
<%= link_to "Export", {:controller => "complaigns", :action => "export", :complaigns => @complaigns}%>
这是导出方法
def export
@complaigns = params[:complaigns]
end
现在,在导出 View 中,当我执行以下行时:
@complaigns.each
,我收到这个错误--
undefined method `each' for "#<Complaign::ActiveRecord_Relation:0x00000003cfb4c8>":String
现在这是因为,我认为,String
类中没有方法each
。有什么办法,我可以在方法 export
中将 String 转换为 Complaign 类型,或者在从索引 View 传递它时,将它作为 Complaign 对象而不是 String 传递?还有其他方法吗?
最佳答案
Controller 参数中不能直接传递Ruby on Rails模型对象,可以传递它们对应的id,然后从数据库中加载模型。 HTTP/Ruby on Rails 是无状态的。如果您总是在导出前转到索引,解决此问题的一种方法可能是:
<%= link_to "Export", {:controller => "complaigns", :action => "export", :complaigns => @complaigns.map(&:id)}%>
def export
@complaigns = Complaigns.find(params[:complaigns])
end
关于ruby-on-rails - 未定义的方法 `each' 为 "#<Complaigns::ActiveRecord_Relation:0x00000003cfb4c8>":String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447539/