从一个文本字段更新多个列

时间:2016-08-03 00:20:00

标签: ruby-on-rails

我试图解析来自单个表单字段的输入以更新表中的3列。我创建了一个自定义属性,并定义了我自己的setter和getter方法,以便在表单中使用。我遇到的问题是如何设置实际的列数据。它似乎没有采取输入。

我的二传手如下:

def humanized_ingredient=(value)
    parsed = Ingreedy.parse(value)
    write_attribute(:amount, parsed.amount) 
    write_attribute(:name, parsed.ingredient) 
    write_attribute(:unit, parsed.unit)
end

我在params白名单中有新的humanized_ingredient但它似乎对数量,名称或单位没有任何作用。服务器控制台中没有任何错误。我也试过这个

def humanized_ingredient=(value)
        parsed = Ingreedy.parse(value)
        self.name = parsed.ingredient
        self.amount = parsed.amount
        self.unit = parsed.unit
end

以下是观点:

<div class="row">
    <div class="small-11 columns">
        <%= f.text_field :humanized_ingredient %>
    </div>
    <div class="small-1 columns">
        <%= f.hidden_field :_destroy %>
        <%= link_to "Remove", '#', :onclick => h("remove_fields(this)"), class: "btn", title: "Remove Ingredient", remote: true %>
    </div>
 </div>

不知道为什么不采取参数

编辑:我是一个白痴,不应该在小睡觉时代码...所以我忘了我在我的父模型中的accepts_nested_attributes上有reject_if ...以为我得到了所有的验证检查。显然,当它拒绝时,它不会给出任何类型的输出,所以它不会在日志中弹出被拒绝而只是不处理数据。现在一切都按预期工作了

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助

@column_value = params[:column_value]
@table = Table.New
@table.column1 = @column_value
@table.column2 = @column_value
@table.column3 = @column_value

或者您也可以使用setter

def column_value=(value)
  self.column1 = value
  self.column2 = value
  self.column3 = value
end

记住你必须使用:form_value in form也作为属性

如果仍然无效,请检查您是否允许:column_value参数

def params_table
 params.require(:table).permit(:column_value)
end