【问题标题】:How to get parameters value in model from views form in rails?如何从rails中的视图中获取模型中的参数值?
【发布时间】:2015-06-27 05:10:03
【问题描述】:

这是我的new.html.erb

<%= form_for :simulation, url: simulations_path do |f|  %>

<div class="form-group">
  <%= f.label :Name %>
  <div class="row">
    <div class="col-sm-2">
      <%= f.text_field :name, class: 'form-control' %>
    </div>
  </div>
 </div>

 <div class="form-group">
<%= f.label :'Rendering Option' %>
 <div class="Dropdown">
  <div class="col-sm-4">
  <%= select_tag(:is_random, options_for_select([['Random', true], ['No Opinion', false]], selected: :is_random )) %>
</div>

</div>
<div class="row">
 <div class="col-sm-6">
   <%= f.submit 'Submit', class: 'btn btn-primary' %>
 </div>

simulations_controller.rb

class SimulationsController < ApplicationController
 def index
  @simulations = Simulation.all
 end

 def new
 end

 def create
   @simulation = Simulation.new(simulation_params)
   @simulation.save
   redirect_to @simulation
 end

 def show
    @simulation = Simulation.find(params[:id])
 end

结束

Simulation.rb(模型类)

class Simulation < ActiveRecord::Base
  belongs_to :user
end

Schema.rb

 create_table "simulations", force: :cascade do |t|
  t.string   "name"
  t.boolean  "is_random"
 end

我无法在数据库中设置:is_random 值,而休息很好。我在这里做错了什么?我检查了sqlite数据库中的值,is_random列中有null条目。

【问题讨论】:

  • @ArupRakshit 我是 ruby​​ 的新手,正在寻找一种开始开发的方法。 select_tag 有什么问题吗?

标签: ruby ruby-on-rails-4 view controller


【解决方案1】:

您需要在进行批量分配时允许属性。你可以写成:

<%= f.select(:is_random, options_for_select([['Random', true], ['No Opinion', false]], selected: :is_random )) %>

<%= select_tag("simulations[:is_random]", options_for_select([['Random', true], ['No Opinion', false]], selected: :is_random )) %>

使用您的语法,该值在params 散列中作为{..., is_random: true,..},这就是为什么在强参数过滤方法中您没有得到它的原因。如果您现在使用建议的解决方案,您将获得 params 散列中的值,例如 {..., simulations: { is_random: true,..}, ...}

您可以在发出请求时从 development.log 文件中检查所有这些内容。

【讨论】:

    【解决方案2】:

    您需要使用如下形式的对象选择方法:

    <%= f.select(:is_random, options_for_select([['Random', true], ['No Opinion', false]], selected: :is_random )) %>
    

    【讨论】:

      【解决方案3】:

      使用f.select(上面建议)应该可以解决您的问题。如果您查看生成的 html,您将看到名称为“is_random”的此字段。它应该是“模拟[is_random]”。当您像 params[:simulations] 这样从 params 对象中提取表单字段值时,所有名称为“simulations[name]”的表单字段都将包括在内。使用表单构建器对象正确命名表单字段。

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        您还可以使用&lt;%= debug params %&gt; 来检查参数中的内容,这非常有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多