【问题标题】:Rails: how to send a string from controller to view?Rails:如何将字符串从控制器发送到视图?
【发布时间】:2015-12-05 01:01:32
【问题描述】:

我是 Rails 新手,我希望我的控制器使用从操作创建的变量 @msg 更新视图中的 label/html 字段。现在我有,

查看表格:

<%= form_tag({controller: "home", action: "drawMoney"}) do %>
<h1> Draw Out </h1>
    <%= number_field_tag :draw, min: 1, max:1000 %>
    <%= date_field_tag :customDate %>
<%= submit_tag "Save" %>
<% end %>

<p>
  <%= "#{@msg}" %>
</p>

控制器

def drawMoney
@drawAmount = params[:draw]
@credit = Credit.getCredit('1')
@updateAmount = updatePrincipal(@credit.principal, @drawAmount)
@newLimit = updateLimit(@credit.currLimit, @drawAmount)

@msg = "success!"

if (@transaction = Transaction.create(userId: @credit.userId, date: params[:customDate], OPB: @credit.principal, amount: @drawAmount).valid?)
  @credit.update(principal: @updateAmount, currLimit: @newLimit)
  @transaction = Transaction.create(userId: @credit.userId, date: params[:customDate], OPB: @credit.principal, amount: @drawAmount)
else
  @msg = "not valid"
end

redirect_to action: "index"
end

我已经阅读了 ruby​​ 文档和 youtube 教程,尝试将 @msg 放在视图中,并将 @msg 放在 html 等中。但这并没有在视图中打印任何内容,并且无法从搜索中真正找到答案。任何帮助将不胜感激!

编辑:

我尝试更改为 但它不起作用.. 所以当我单击提交按钮时调用该方法,直到那时没有 @msg 实例。会不会有问题?

【问题讨论】:

  • 这是因为您正在重定向。它会丢失所有设置的变量。按照@imechemi 的建议使用闪光灯

标签: ruby-on-rails ruby


【解决方案1】:

当您重定向到索引时,您当前定义的变量将被清除。

控制器

flash[:msg] = "Success"
redirect_to action: "index"

查看

<% if flash[:msg] %>
  <div class="message"><%= flash[:msg] %></div>
<% end %>

【讨论】:

    【解决方案2】:

    试试这个:

    <pre>
      <%= @msg %>
    </pre>
    

    【讨论】:

      【解决方案3】:

      将此&lt;%= "#{@msg}" %&gt; 更改为&lt;%= @msg %&gt;您不必在此处进行插值,当您使用@ 符号创建rails 视图时,它可以直接访问控制器实例。

      【讨论】:

      • 感谢您的意见! :)
      • @imechemi 是正确的,重要的一点。当您重定向到索引时,索引中的变量现在可以在视图中访问。
      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      相关资源
      最近更新 更多