【问题标题】:Rails how to get id from current urlRails 如何从当前 url 获取 id
【发布时间】:2015-11-16 06:40:47
【问题描述】:

我正在构建应用程序 - 简单的成绩册,但被困在一件事上。我有用户、等级和测试的模型文件,其中:

class Grade < ActiveRecord::Base
   belongs_to :user
   belongs_to :test
end

class Test < ActiveRecord::Base
   has_one :grade, dependent: :destroy
   validates :topic, presence: true
end

class User < ActiveRecord::Base
  has_one :profile, dependent: :destroy
  has_many :grades, dependent: :destroy
end

Grade 表包含 user_id、test_id 和 result。

这个想法是这样的:来自 user#show 页面的每个用户只能查看他/她的某个科目的成绩(我只做了两个)。老师可以看到每个创建的学生的成绩。事情是这样的:当我以教师(管理员)身份登录并从某个用户页面转到成绩页面时,我的 URL 更改如下:

/user/7 -> /grades/7?subject=History

对于用户的 id,一切都很清楚,但在我的数据库中,我没有 id=7 的等级。所以问题是这样的:

我如何从成绩链接访问这个 id '7' 以将其与成绩表中的 user_id 进行比较,以仅显示该用户的成绩。尝试如下,但得到了空表:

<% @grades.each do |g| %>
    <tr>
        <% if Test.find(g.test_id).subject == 'History' && User.find(params[:id]) == g.user_id %>
            <td><%= Test.find(g.test_id).topic %></td> 
            <td><%= Test.find(g.test_id).date %>
            <td><%= g.result %></td>
        <% end %>
    </tr>
<% end %>

所以通常我正在寻找类似this_url(params[:id]) 的东西。你有什么想法?请帮忙!

【问题讨论】:

  • 检查 params 变量并访问您需要的内容
  • 请粘贴生成URI的链接

标签: ruby-on-rails ruby ruby-on-rails-4 active-record-query


【解决方案1】:

我要建议的第一件事是在你的观点上尽可能少的逻辑。

话虽这么说:如果你想获取特定用户的成绩,由于成绩与用户有关系,你应该可以直接拨打user.grade

另外,你不需要在你的视图中做&lt;%= Test.find(g.test_id).topic %&gt;,而不是调用Test.find(g.test_id).topic,你可以直接调用g.test.topic

因此,要进行全面重构,您可以在控制器中包含以下内容:

def <the name of your controller action>
  @user = User.find(params[:id])
  @grades = @user.grades.where(subject: 'history')
end

然后在你看来:

<% @grades.each do |g| %>
  <tr>
    <td><%= g.test.topic %></td> 
    <td><%= g.test.date %>
    <td><%= g.result %></td>
  </tr>
<% end %>

一切都应该正常。

注意: 您可以follow this post 从 URL 中获取主题的名称并将其动态包含到您的控制器查询中,但我建议将主题作为参数传递以及(/grades/7/history),而不是将其作为查询传递(/grades/7?subject=History)。

【讨论】:

  • 谢谢!这正是我想要的。
猜你喜欢
  • 2012-07-05
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2017-04-09
  • 1970-01-01
  • 2010-11-02
  • 2010-10-30
相关资源
最近更新 更多