【问题标题】:ROR radio buttons for dummies?傻瓜的 ROR 单选按钮?
【发布时间】:2012-02-28 10:14:55
【问题描述】:

我已经阅读了这方面的文档,但我仍然不知道该怎么做。

我在表中有一个 :free 列,它是一个布尔值

true  = free
false = paid
nil   = both

我正试图在我的表单中捕捉同样的逻辑,但我做得非常糟糕......到目前为止,一切都是免费的

index.html.erb:

 <div class="field">
    <label class="radio">
      <%= radio_button_tag(:free, "free", :checked => true) %>
      Free
    </label>
    <label class="radio">
      <%= radio_button_tag(:free, "paid") %>
      Paid
    </label>
    <label class="radio">
      <%= radio_button_tag(:free, "both") %>
      Both
    </label>
  </div>

resources_controller.rb(我知道这并不理想,因为它每次都检查参数(即使他们输入了错误的信息)但我不确定如何检查是否可以在不保存的情况下保存它。另外。 ..我什至不知道我的参数是否正确,但我也不知道如何检查它。当我做p params[:resources]时,它不会打印出它的id。有没有一种好方法来做这种事情轨道?

def create
    @resource = Resource.new(params[:resource])

    if params[:resource][:free] = "free"
      @resource[:free] = true
    elsif params[:resource][:free] = "both"
      @resource[:free] = nil
    else
      @resource[:free] = false
    end

    if @resource.save
      redirect_to root_url
    else
      render :action => :new
    end 
  end

resources_helper.rb

  def output_free
    if @resource.free = true
      "Free"
    elsif @resource.free = false
      "Paid"
    else
      "Both"
    end
  end

【问题讨论】:

  • 您需要== 进行比较。而且nil 不是Boolean
  • 好吧,我觉得自己很弱智。我一直盯着这种方式太久了。我知道:|至于布尔值,我不能用它来检查 3 个状态吗?
  • 那是模糊逻辑,true/false/null。 SQL 中确实存在,您可以使用它,但这是您不想要的魔法。使用Enum 和三种状态 - 方式更清晰。
  • 你能给我指出 Enum 的资源吗?我不记得读过这个,特别是我如何在数据库迁移中写这个
  • 不,您在使用 AR 时需要自定义 SQL。 Datamapper 具有 Enum 数据类型。您也可以使用简单的varchar(50) 列:-)

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

这是模糊逻辑,真/假/空。 SQL 中确实存在,您可以使用它,但这是您不想要的魔法。使用枚举和三种状态 - 方式更清晰。

并使用== 进行比较:-)

【讨论】:

  • 最后一个问题,我如何在不检查的情况下检查参数(即使有错误)?
  • 不知道,再问一个问题:-)
  • 我正在使用这种方法:stackoverflow.com/a/1263608/794481 并且我不断收到错误 TypeError: no implicit conversion from nil to integer when I try to save x = Resource.new
  • 我添加了 :default => 0,我认为这可能是问题
  • 不,我又是个白痴,我使用 :cost => 0 而不是 :free。感谢你的帮助!经过 10 个小时的轨道后,我真的犯了马虎的错误:S
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多