Ruby on Rails:使用表单提交传递条件隐藏值

时间:2017-03-28 01:49:39

标签: ruby-on-rails

简而言之:我的表单包含2个值的文本字段:title和:title_de。我需要自动传递值:lang on submit为“eng”或“de”,具体取决于:title是否为空。怎么做?

编辑:用于创建的控制器代码:

def create
  @article = Article.new(article_params)

  if @article.save
    redirect_to @article
  else
    render 'new'
  end
end

3 个答案:

答案 0 :(得分:1)

<强>更新

在控制器中分配lang的解决方案:

def create
  @article = Article.new(article_params)

  @article.lang = params[:title].blank? ? "de" : "eng"

  if @article.save
    redirect_to @article
  else
    render 'new'
  end
end

或者,如果您愿意,可以使用javascript / jquery获取:title的值,然后在提交表单之前将正确的值分配给:lang

段:

&#13;
&#13;
$('#my-button').on('click', function() {
  event.preventDefault();
  var title = $('#title').val();

  if(title == "") {
    $('#lang').val("de");
  } else {
    $('#lang').val("eng");
  }
  
  // change to $('#my-form').submit();
  alert($('#lang').val());
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id="my-form">
  title: <input type="text"name="title" id="title"/><br>
  title_de: <input type="text" name="title_de" id="title_de"/><br>
  <input type="hidden" id="lang" name="lang" />
  <input type="submit" id="my-button" />
</form>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

当表单字段留空时,它返回nil。您可以检查nil并在控制器中设置语言:

if params[:title] == "nil"
# set the language
else 
# title is not nil, do something else
end

您也可以使用javascript在视图中执行此操作,但如果用户禁用了javascript,则表示您遇到了问题。

答案 2 :(得分:0)

使用javascript,你可以这样做

In your view add hidden_file_tag
<%= hidden_filed_tag :langauge, id: "langauge" %>

and in javascript
$('#title').on("change",function(){
  if($(this).val() == ""){
    $("#langauge").val('eng')
  }else{
    $("#langauge").val('de')
  }
});