在Rails 3中,是否可以从视图中的另一个模型调用@variable?

时间:2012-03-16 10:37:52

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我遇到了一个问题...... 我正在建立一个网站的主页,并尝试将有关用户,消息,location_infos bla bla bla的信息集成到同一页面中(使用jquery和ajax)......

在PHP或JSP中,我认为这样的页面很容易制作(将所有这些函数划分为不同的服务并构建一个主页来加载它们),但在Rails 3中,我发现实际上我只能将@user呈现给模型是“用户”的视图,如果模型是“User_group”,则只有@user_group ...

好吧,我使用'has_many,belongs_to,has_one'来组织其中一些模型。 (这样我就可以使用像user.user_groups.each这样的变量了)但实际上总有一些不同的东西,我认为声称这两个模型有连接是不恰当的,例如在位置和用户之间...所以在这环境,如何在某个视图页面中引用其他模型的变量?或者这是非常有害的,我真的必须避免,以便我可能不会认真打破RESTFul页面样式?

这是我的代码:

Class UsersController< ApplicationController
def home
  if session[:current_user_id]==nil
    redirect_to :action=> "login"
  else
      @user =User.find(session[:current_user_id])

      respond_to do |format|
        format.html
        format.json {render json: @user}
      end
    end
  end
end

所以在users / home.html.erb

我可以使用像@user.XXX这样的代码来生成内容

但如果我按如下方式重写方法:

  def home
    if session[:current_user_id]==nil
      redirect_to :action=> "login"
    else

      #here \\\
      @user_2=User.find(session[:current_user_id])

      respond_to do |format|
        format.html
        format.json {render json: @user}
      end
    end
  end

我发现无法在users / home.html.erb

中调用@ user_2

如果我在UsersController中添加更多内容:

@ USER_GROUP = User_group.find(会话[:current_user_id])

我发现我不能像@user_group一样呈现format.html {render @user_group}   而且我也无法获得users / home.html.erb中的@user_group

1 个答案:

答案 0 :(得分:0)

我不太明白你在问什么,但我认为你可能希望发送的不只是@user到视图。您想发送@user_group,@ user_location等。这是正确的吗?如果是这种情况,那么您不必使用渲染作为'format'语句来在视图中使用模型变量,只需像您一样定义它们。

如果这是关于获得关系的问题,您可以获得User.locations或User.groups。如果您的模型设置正确,这些将返回您的用户位置和组的列表。