【问题标题】:Ruby on Rails: check_box_tag - default if nothing selectedRuby on Rails:check_box_tag - 如果没有选择则默认
【发布时间】:2012-11-26 20:42:37
【问题描述】:

我有一个应用程序,用户可以在其中将项目输入数据库。

有一个选项,他们可以为他们的项目选择多种不同的技术。目前,如果用户未选择至少 1 项技术,应用程序会标记错误。

我想改变这一点,如果他们不选择一种技术,它会自动降为“其他”。

这是我的项目控制器操作,新建和创建:

def new
    @project = Project.new
        @technol = Technol.new(params[:tech])

        @all_technols = Technol.order('tech ASC') 
        @all_technols = Technol.all
        tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil?


        @project_technol = @project.projecttechnols.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end



def create  
    @project = Project.new(params[:project])
        @project.client = params[:new_client] unless params[:new_client].blank?
        @project.industry = params[:new_industry] unless params[:new_industry].blank?
        @project.business_div = params[:new_business_div] unless params[:new_business_div].blank?


if !params[:technols].nil?

            params[:technols][:id].each do |tech|


                if !tech.empty?

                    @project_technol = @project.projecttechnols.build(:technol_id => tech) 
                    end
            end

end

这是技术领域的新观点

<ul> 


<% @all_technols.each do |technol| %> 



<li class="split"> 
<%= check_box_tag "project[technol_ids][]", technol.id,  @project.technols.include?(technol) %> 
<%= technol.tech %> 
</li> 

<% end %>
</ul> 

技术表中“其他”的技术 ID 为“18”。那么有没有办法说如果不选择技术,那么:technol_id =&gt; ["18"]。

我对 Rails 还很陌生,所以在尝试提供帮助时请记住这一点。非常感谢

【问题讨论】:

    标签: ruby-on-rails ruby controller default


    【解决方案1】:

    你有两个选择。

    首先,在表单中添加一个隐藏输入:

    <input type="hidden" name="project[technol_ids][]" value="18" />
    

    二、更新controller#action中的参数:

    def create
      ...
      technol_ids = params[:technol_ids].blank? ? [18] : params[:technol_ids]
      technol_ids.each do |id|
      ...
      end
      ...
    end
    

    【讨论】:

    • &lt;input type="hidden" name="project[technol_ids][]" value="18" /&gt; 完美运行。谢谢
    • 我只是想到一件事:隐藏输入,所有项目都会添加18个。也许这不是你想要的。你最好试试第二种方案。
    • 我在发帖后注意到了这一点。找到了另一个解决方案。感谢您的帮助
    【解决方案2】:

    您可以做的是编写迁移并设置列的默认值如下

    add_column :users, :technology, :string, :default => "other"
    

    所以即使用户不会选择任何值,默认值也会是 true 而不是 nil

    【讨论】:

    • 我添加了一个迁移change_column :projecttechnols, :technol_id, :integer, :default =&gt; 18。当我进入一个新项目时,这似乎并没有节省技术
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多