Rails:如何从控制器发送字符串到视图?

时间:2015-12-04 16:50:56

标签: ruby-on-rails ruby

我是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 docs和youtube教程,尝试将@msg放在视图中,而@msg放在html中等等。但是这不会在视图中打印任何内容,也无法从搜索中找到答案。任何帮助将不胜感激!

编辑:

我尝试更改为&lt;%= @ msg%&gt;但它不起作用.. 所以当我单击提交按钮时调用该方法,直到那时没有@msg实例。这可能是个问题吗?

3 个答案:

答案 0 :(得分:3)

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

控制器

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

视图

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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