【问题标题】:Select 'OTHERS' option from drop down list creating text field Ruby on Rails - 4.2从创建文本字段的下拉列表中选择“其他”选项 Ruby on Rails - 4.2
【发布时间】:2018-03-06 01:30:38
【问题描述】:

_form.html.erb

 <div class="form-group">
  <%= f.label :description %><br>
  <%= f.select(:description, options_for_select([['', ''],['METRO', 'METRO'], ['BUS', 'BUS'], ['TAXI', 'TAXI'], ['OTHERS', 'OTHERS']]), {}, {class: "form-control", id: "expense_description"}) %>
  <br>
  <div id="otherDesc">
    <%= f.text_field :description_other, class: "form-control" %>
  </div>
</div>

index.html.erb

<% @expenses.each do |expense| %>

<tr class="tr-<%= cycle('odd', 'even') %>">

<td class="col-1"><%= (expense.description_other.present? ? expense.description_other : expense.description) %></td>

</tr>

<% end %>

expenses_controller.rb

class ExpensesController < ApplicationController
  before_action :set_expense, only: [:show, :edit, :update, :destroy]

  # GET /expenses
  # GET /expenses.json
  def index
    @expenses = Expense.all
  end

  # GET /expenses/1
  # GET /expenses/1.json
  def show
  end

  # GET /expenses/new

   def new
    if Expense.last.present?
      @expense = Expense.last.dup
    else
      @expense = Expense.new
    end
   end

  # GET /expenses/1/edit
  def edit
  end

  # POST /expenses
  # POST /expenses.json
  def create
    @expense = Expense.new(expense_params)

    respond_to do |format|
      if @expense.save
        format.html { redirect_to @expense, notice: 'Expense was successfully created.' }
        format.json { render :show, status: :created, location: @expense }
      else
        format.html { render :new }
        format.json { render json: @expense.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /expenses/1
  # PATCH/PUT /expenses/1.json
  def update
    respond_to do |format|
      if @expense.update(expense_params)
        format.html { redirect_to @expense, notice: 'Expense was successfully updated.' }
        format.json { render :show, status: :ok, location: @expense }
      else
        format.html { render :edit }
        format.json { render json: @expense.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /expenses/1
  # DELETE /expenses/1.json
  def destroy
    @expense.destroy
    respond_to do |format|
      format.html { redirect_to expenses_url, notice: 'Expense was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_expense
      @expense = Expense.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def expense_params
      params.require(:expense).permit(:description, :description_other)
    end
end

expense.js

$(document).ready(function () {
      $('#expense_description').on('change',function(){
        var selectedValue = $(this).val();
        selectedValue == "OTHERS" ? $("#otherDesc").show() : $("#otherDesc").hide()
      });
 });

general.scss

#otherDesc {
display:none;
}

一切正常,除了我的索引页面,我为“其他”选择的选项获得了两个值,即“其他”+“我自己的描述”。例如在图像中它是 OTHERS WHITE GLUE。但我希望只有 WHITE GLUE 作为描述。

请在附件中找到图片供您参考。

我太努力了,但没有得到想要的结果。

欢迎提出任何建议。

提前谢谢你。

【问题讨论】:

  • 这个应该很容易适应...stackoverflow.com/questions/31291645/…如果您需要更多详细信息,您只需转到 Jquery 文档页面即可。
  • 聊天中的每个 convo - 这是一个演示如何向表单添加字段的问题 - 这里的代码位于我给你的上一个链接中“触发”“锚”的代码中...stackoverflow.com/questions/6099301/…
  • 这是一个有用的教程,它将引导您了解理论(它的错误版本,但告诉您如何进行该过程)。您必须编写自己的条件进行测试。 rubyplus.com/articles/…
  • 如果你将&lt;td class="col-1"&gt;&lt;%= expense.description %&gt;&amp;nbsp 包装在一个条件中,如果&lt;%= link_to expense.description_other,{}, {:style =&gt; 'color: #CC3366'} %&gt; 显示它就不会显示会发生什么?
  • 我添加了控制器,希望您拥有这里需要的几乎所有代码。

标签: javascript jquery ruby-on-rails-4


【解决方案1】:

找到了——我有时有点瞎……

index.html.erb
<td class="col-1"><%= expense.description %>&nbsp;<%= link_to expense.description_other,{}, {:style => 'color: #CC3366'} %></td>

你有两个&lt;%= ... %&gt;在那里...

&lt;%= expense.description %&gt;

然后

&lt;%= link_to expense.description_other,{}, {:style =&gt; 'color: #CC3366'} %&gt;

Get ride of the first one when OTHER is selected, using an if conditional(the trinary operator we talked about &lt;expression&gt; ? &lt;if true do this happens&gt;: &lt;if false this happens&gt; The conditional would have to contain both statements inside one &lt;%= ... %&gt; block.

另外,你在这里有一个问题......应该有某种条件......可能是||= & 删除 Expense.new 或 Expense.last.dup

  def new
    @expense = Expense.new

    @expense =  Expense.last.dup
  end

【讨论】:

  • 感谢您的回复。关于这一点, ? :我试过了,我有,但是一个问题它只显示“其他”作为描述。
  • 我更新了控制器中的/expenses/new,现在可以正常工作了。
  • 太棒了,如果现在可行,您可以选择问题的答案并开始新的问题以解决更多问题。
  • 我赞成这个,   'color: #CC3366'} %> 在我使用 .sub 方法后它就可以工作了.
  • 您不应该这样做,您是否进入 Rails 控制台并完成了我前一周谈到的@expense.description 测试?如果它没有修复我在这里发布......它可能是哈希的序列化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多