用于假人的ROR单选按钮?

时间:2012-02-28 10:14:55

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

我已经阅读了相关文档,但我仍然不知道如何做到这一点。

我在表中有一列: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(我知道这不是理想的,因为它每次都检查params(即使他们输入了错误的信息)但是我不知道如何在不保存的情况下检查是否可以保存它。 ..我甚至不知道我是否做了params正确但我不知道如何检查它。当我做p params[:resources]时它不会打印它是如何像它一样。有一个很好的方法来做这种铁轨上的东西?

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

1 个答案:

答案 0 :(得分:2)

这是模糊逻辑,true / false / null。在SQL中存在,你可以使用它,但这是你不想要的魔法。使用Enum和三种状态 - 方式更清晰。

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