如何通过html.erb视图中的单选按钮使用if else功能?

时间:2014-09-18 03:02:00

标签: ruby-on-rails ruby html5 radio-button erb

我有这样的观点(/app/views/projects/new.html.erb) 如何使用if else函数来执行此操作?

<p>
<%= f.label :payment_type, "payment_type" %>
<%= f.radio_button :payment_type, 1, checked: true %>(1)
<%= f.radio_button :payment_type, 2 %>(2)
</p>

if payment_type == 1

  show these things

else(or payment_type == 2)

  show these things

end

我的控制器保存此视图(/app/controllers/projects_controller.rb):

def new
  @project = Project.new
end

def create
  @project = Project.new(params.permit![:project])
end

我如何使用它属性

2 个答案:

答案 0 :(得分:3)

<强>的Javascript

您需要使用Javascript为您提供一些前端互动。

为了给你一些细节 - 当你运行Rails应用程序时,* rails&#34;系统的一部分将在后端运行 - 这意味着每次渲染一个&#34;视图&#34;时,您的控制器将从您的模型中提取数据,允许Rails为您创建纯HTML输出。

您遇到的问题是,当您渲染此输出时,您无法再为该调用再次调用Rails功能(查看stateless技术如何工作 - An example of a stateless protocol is HTTP, meaning that each request message can be understood in isolation.),这意味着您需要某种方式管理界面的前端区域。

这是通过Javascript完成的:

  

[Javascript]最常用作网络浏览器的一部分,其中   实现允许客户端脚本与用户交互,   控制浏览器,异步通信,并改变   显示的文档内容

-

这就是你处理它的方式:

JSFiddle

  
      
  1. &#34;绑定&#34;收音机输入&#34;改变&#34;事件
  2.   
  3. 触发更改事件时,直接在JS中执行业务逻辑
  4.   
  5. 将更改附加到视图(DOM
  6.   

<强>滑轨

以下是您需要具体做的事情:

#app/assets/javascripts/application.js
$(document).on("change", 'input[type="radio"]', function(){
    if($(this).val = "1") { 
        // something here
    }else{
        // something else here
    };
});

#app/views/controller/your_view.html.erb
<%= f.label :payment_type, "payment_type" %>
<%= f.radio_button :payment_type, 1, checked: true %>(1)
<%= f.radio_button :payment_type, 2 %>(2)

-

<强>的Ajax

除此之外 - 如果您想将基于Rails的业务逻辑返回到您的视图,您将要使用ajax。除了说这基本上会发送一个&#34;伪请求&#34;之外,我不会对此进行太多细节处理。到你的浏览器。

以下是您的设置方式:

#config/routes.rb
resources :payments do
   get :type, on: :collection #-> domain.com/payments/type
end

此自定义方法将允许您执行所需的业务逻辑:

#app/controllers/payments_controller.rb
class PaymentsController < ApplicationController
   def type
      type = params[:type]
      if type == "1"
         ...
      else
         ...
      end
   end
end

这将使您能够对此方法进行ajax调用:

#app/assets/javascripts/application.js
$(document).on("change", 'input[type="radio"]', function(){
        $.ajax({
           url: "payments/type",
           data: { type: $(this).val() },
           success: function(data) {
              alert("Success");
           }
        });
});

答案 1 :(得分:1)

<% if payment_type == 1  %>
    these
<% else %>
   those
<% end %>