Ruby on Rails:如何通过表单将实例变量从控制器传递到另一个控制器

时间:2016-08-23 14:57:26

标签: ruby-on-rails ruby

我是rails和web开发的新手,所以请耐心等待。 我一直在尝试为站点构建各种自动部署系统。我在我的主页中有一个表单,它获取了site_name模型的名称字段,我试图将此名称(以及site_name实例)传递给另一个进行部署的控制器。但是,我无法正确传递名称。如何将实例变量从from传递给另一个控制器?

这些是我使用FYI的文件

home.html.erb

<div class="center jumbotron">
  <h1>Welcome to the Sample App</h1>

  <div class="input-group">
    <%= form_for @site_name, url: {action: "instantiate", controller: "script_execute"}, html: {method: "get"} do |f| %>

    <%= f.label :name %>
    <%= f.text_field :name, class: 'form-control' %>

    <%= f.submit "Create my account", class: "btn btn-primary" %>
    <% end %>
  </div>
  <%= link_to "Sign up now!", instantiate_path, class: "btn btn-lg btn-primary" %>
</div>

script_execute_controller.rb(包含实例化操作)

class ScriptExecuteController < ApplicationController

  def instantiate
    site_name = @site_name.name
    @hostname = 'myhostname'
    @username = 'myusername'
    @password = 'mypassword'
    @cmd = "yes #{site_name} | ./denemescr.sh"
    begin
      ssh = Net::SSH.start(@hostname, @username, :password => @password)
      res = ssh.exec!(@cmd)
      ssh.close
      puts res
    end
    redirect_to root_url
  end
end

static_pages_controller.rb(主页的控制器)

class StaticPagesController < ApplicationController
  def home
    @site_name = SiteName.new
  end
end

1 个答案:

答案 0 :(得分:0)

您使用GET发布表单的原因是什么?将其更改为帖子并通过params [:name]在帖子路由到的操作中获取名称。您最初实例化实例变量,并且实际上是发布到您的方法实例化。