2012-09-14 56 views
0

这里是我的索引方法,它试图访问2个不同的模型,即,会议&电子邮件:如何在单个控制器中访问多个模型,Ruby on Rails?

def index 
    user_session = Session.find_by_user_id(user_id) 

if !user_session.blank? 
    if setting_orig = GlobalSetting.find_by_settings_session_id(user_session.id) 
     @setting = setting_orig.dup 
    end 

else 
    @setting = GlobalSetting.first.dup 
end 

但是,当我尝试创建这种形式:

<%= form_for(@setting) do |f| %> 
<%= f.text_field :username %> 
<%= f.password_field :password %> 
<%= f.submit "Submit" %> 

我显示了这个错误,未定义的方法'model_name'为NilClass:Class。如何使其工作,任何建议?

+1

查看堆栈跟踪中的行号,找出代码中错误来自哪里。看起来@setting可能是零,因为form_for必须检查它才能找出model_name。 – Unixmonkey

+0

我认为它很困惑,因为我们正在访问2个模型,当我评论user_session = Session.find_by_user_id(user_id)这一行,它工作正常 – Raul

回答

2

Unixmonkey有正确的想法,看你的堆栈跟踪,并找出错误来自哪里。

另外,您的语句逻辑中有一个漏洞。如果user_session不为空(SOMEONE已登录),但无法找到setting_session_id等于user_session.id的电子邮件(用户没有电子邮件或许?),那么@setting永远不会被声明,因此您将运行进入你的错误。

def index 
    user_session = Session.find_by_user_id(user_id) 

    if !user_session.blank? AND setting_orig = GlobalSetting.find_by_settings_session_id(user_session.id) 
    @setting = setting_orig.dup 
    else 
    @setting = GlobalSetting.first.dup 
    end 
end 
+0

对不起,它不是EMail,它应该是GlobalSetting,其中第一行是默认设置和其余行是用户自定义设置。 – Raul

+0

并记住,这个工程:user_session =零#user_session = Session.find_by_user_id(user_id) – Raul

+0

对,我刚刚离开你的代码。即使它是'GlobalSetting'而不是'EMail',问题仍然存在,你的逻辑中有一个洞,'@ setting'永远不会被声明。 为了向你自己证明@setting没有被声明是问题,请尝试注释掉所有的if语句,然后离开'@setting = GlobalSetting.first.dup'。如果你的代码不适用于此,那么还有其他问题 –

相关问题