Rails从表单中获取数据(保存在数据库中)并显示它/再次使用它

时间:2015-06-18 16:06:39

标签: ruby-on-rails forms

好的,这是一个noobie问题。我已经创建了一个表单,可以从表单中将数据保存到数据库中。

我想在视图或控制器中显示数据,这是我从表单中获得的。

以下是表单的代码。

控制器: msgs_controller.rb

class MsgsController < ApplicationController
  def new
    @msg = Msg.new
    @msgs = Msg.all
  end

  def create
    @msg = Msg.new(msg_params)
    if @msg.save
      redirect_to msgcomp_path
    end
  end

def msg_params
  params.require(:msg).permit(:name, :emails, :content, :phone)
end

end

视图: new.html.haml

 .row
  .col-md-12
    .col-md-4
      //Home page text
      .text-title
        %h1 DMS International Ltd.

      .text-norm
        %p London Heathrow: +44 (0)20 8897 1766
        Suite 207, UCH House, Old Bath Road, Colnbrook, Berkshire SL3 0NW

        %p London Gatwick: +44 (0)1293 772608
        Unit 1, Bridge Industrial Estate, Balcombe Road, Horley, Surrey RH6 9HU
    .col-md-8
      %h1 Contact DMS International

      .contactform
        = form_for @msg do |f|
          Full Name:
          %br
          = f.text_field :name 
          %br
          Email:
          %br
          = f.text_field :emails
          %br
          Phone Number:
          %br
          = f.text_field :phone
          %br
          How can we help you ?
          %br
          = f.text_field :content, :class => 'content'
          %br
          = f.submit 'submit', :class => 'btn btn-primary'

    TEMP (will be replaced with email)  Msgs:
    - @msgs.each do |msg|
      %ul
        =  msg.name
        %br
        =  msg.emails
        %br
        =  msg.content
        %br
        =  msg.phone
        %br

现在我想要做的是从数据库获取数据不仅仅是为了这个视图,而是通过做类似的事情来说明主页? (@ msg.emails)但我不知道该怎么做。

我希望能够得到它,以便我可以通过电子邮件发送从表格收集的人员信息。

现在我非常感谢你对此事的帮助。如果我自己找到解决方案,但我一直在寻找数小时/超过一天,我也会及时通知您。谢谢。

1 个答案:

答案 0 :(得分:0)

在Rails中,ID列在显示资源时按惯例使用。 因此,假设您有以下路线定义:

resources :msgs, only: [:show, :index, :new, :create]

这将创建以下路线:

 POST /msgs      | msgs#create
 GET /msgs/new   | msgs#new
 GET /msgs/:id   | msgs#show
 GET /msgs       | msgs#index

注意show route的:id部分 - 它的名称是动态段。

现在在我们的控制器中,我们可以创建缺少的操作:

class MsgsController < ApplicationController

  def show
    @msg = Msg.find(params[:id])
  end

  def index 
    @msg = Msg.all
  end

  def new
    @msg = Msg.new
    @msgs = Msg.all
  end

  def create
    @msg = Msg.new(msg_params)
    if @msg.save
      # Redirects to our new show action
      redirect_to @msg
    end
  end

  def msg_params
    params.require(:msg).permit(:name, :emails, :content, :phone)
  end
end

查询另一个控制器方法的工作方式完全相同。 要查找指向特定电子邮件地址的邮件,我们可以执行以下操作:

@msgs = Msg.where(email: 'bob@example.com')

编辑:

在不同的控制器中查询没有区别。

如果我想在根执行Pages#home中显示所有邮件,例如:

class PagesController < ApplicationController
  def home
    @msgs = Msg.all
  end
end
-# app/views/pages/home.html.haml
- @msgs.each do |msg|
  p= msg.emails

了解更多: