使用rails我如何只显示通过表格中的文本框提交的ID

时间:2015-09-01 15:05:07

标签: ruby-on-rails

我现在有一张充满信息的表格,理想情况下我需要通过链接查看数据库表中的信息。

我只有控制器和一些标准的html(html目前只是一个h1标签)

HTML将像模板一样标准化。

我在脑海中看到我想要的方式是用户将获得一个events_prev/{{id from DB here}}的链接,并且根据ID,页面上的信息将从相应的DB Row中填充

继承我的控制器

class Events::EventsPrevController < ApplicationController
  def index
    @events = Event.where(id: id)
  end

  def show
    render :nothing => true
  end
end

抱歉,如果它超级混乱。

3 个答案:

答案 0 :(得分:1)

欢迎使用rails。

好的,有几件事可以让你朝着正确的方向前进。首先,你真的需要做一些阅读,以了解控制器和路线以及视图如何在轨道中链接在一起,这将对你有所帮助。

但继续讨论你的具体问题:

参数:

通过url传递的所有数据(get,post,put,与方法无关)在控制器中可用,名为params的数组对象 - 这意味着何时想要访问用户的数据提交后,您将使用类似

的内容
@event = Event.where(id: params[:id])

路线:

看起来您正在尝试使用索引页面。在rails中,索引是RESTful路由,通常指向模型对象的集合。 show route将指向一个单独的对象,因此您应该将链接指向show path而不是索引路径。

您可以使用以下命令在命令行上查看模型上可用的路径:

bundle exec rake routes

您的路线可能如下所示的示例:

      prev_events GET    /prev_events(.:format)                prev_events#index
                  POST   /prev_events(.:format)                prev_events#create
   new_prev_event GET    /prev_events/new(.:format)            prev_events#new
  edit_prev_event GET    /prev_events/:id/edit(.:format)       prev_events#edit
       prev_event GET    /prev_events/:id(.:format)            prev_events#show
                  PATCH  /prev_events/:id(.:format)            prev_events#update
                  PUT    /prev_events/:id(.:format)            prev_events#update
                  DELETE /prev_events/:id(.:format)            prev_events#destroy

链接

根据路由表,您现在应该看到用户需要点击的链接可能如下所示(假设event是您的对象:

<%= link_to event.title, event_path(event.id) %>

或快捷方式

<%= link_to event.title, event %>

查看

对于视图,这完全取决于事件模型中的数据。由于数据存储在@event中,因此您可以简单地使用事件模型上的属性来呈现html,但是请使用,例如。

<h3><%= @event.title %></h3>
<span><%= @event.start_time %></span>

答案 1 :(得分:0)

您应该阅读Rails controllers:默认情况下,操作index用于显示所有记录,您所谈论的内容应属于show操作。默认routes负责传递给您的show动作的ID。

答案 2 :(得分:0)

索引操作是指显示视图中的项目列表,而显示操作用于显示单个项目。

您在index中所做的事实上是show行动的意思。

原因:

@events = Event.where(id: id)

这一行在每种情况下都会给你一个记录,这意味着它应该在Show action中。

您的代码应如下所示:

  def show
    @event = Event.find(params[:id])
    [your logic: what you want to do with that @event]
  end