【问题标题】:avoid issue in the mvc避免在 mvc 中出现问题
【发布时间】:2013-02-17 17:05:47
【问题描述】:

我知道视图不应该有任何关于模型或控制器的知识,但我不确定如何避免它。

问题是我试图从控制器或模型中获取信息,然后才需要在我的视图中对其进行操作。

这里是代码

Model     
USER       LOCATION      ARTICLE
id         user_id       title
first      article_id    ...
last
...

关系

user has many locations
article has many locations
location belongs to user
location belongs to article

控制器

@userlocation = @user.locations

查看

<% @userlocation.each do |event| %>
  ...
  <% evTitle = Article.find_by_id(event.article_id) %>
  <%= evTitle.title %>
<% end %>

显然它不是最好的不确定如何在控制器中进行查询,并且 evTitle 没有正确报告为什么?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller


    【解决方案1】:

    在控制器中你可以这样做:

    @userlocations = @user.locations
    @locations_articles = Article.find_all_by_id(@userlocations.map(&:article_id).uniq)
    

    然后你可以在视图中使用@locations_articles。避免在视图中使用db queries

    <% @locations_articles.each do |article| %>
        <%= article.title %>
    <% end %>
    

    【讨论】:

    • 唯一的问题是,article_id 只是指第一篇文章,我没有看到第二篇和第三篇
    【解决方案2】:

    你可以先在这里观看 rails cast multiple form 剧集:-

    http://railscasts.com/episodes/196-nested-model-form-part-1

    还有一个属性,你首先应该在模型中定义一个属性,以访问单视图形式的信息。

    定义新 @survey = Survey.new 3.次做 问题 = @survey.questions.build 4.times { question.answers.build } 结尾 结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多