我很好奇获取表单结果的首选方法是什么,复选框表示many_to_many关系以将关系保存在变更集中?
这是一个例子: 架构:
schema "users" do
field :name, :string
field :email, :string
field :active, :boolean, default: true
has_many :products, TestExAdmin.Product
has_many :noids, TestExAdmin.Noid
many_to_many :roles, TestExAdmin.Role, join_through: TestExAdmin.UserRole
end
复选框:
<div class="form-group">
<label class="col-sm-2 control-label" for="user_roles">Roles</label>
<div class="col-sm-10">
<input name="user[roles][]" type="hidden" value="">
<div class="checkbox"><label><input type="checkbox" name="user[roles][1]">role1</label></div>
</div>
</div>
变更:
def changeset(model, params \\ %{}) do
model
|> cast(params, @required_fields, @optional_fields)
|> cast_assoc(:noids, required: false)
|> cast_assoc(:products, required: false)
|> cast_assoc(:roles, required: false)
end
收到的快照:
%{email: "test@example.com", name: "Cory",
products: %{"1481120458618": %{_destroy: "0", price: "13.00",
title: "A product title"}}, roles: %{"1": "on"}}
我目前收到错误:
errors: [roles: {"is invalid", [type: {:array, :map}]
我找到了这个插件,https://github.com/adam12/phoenix_mtm,这有助于解决问题,但我想知道是否有惯用的解决方案。
谢谢, 科里
答案 0 :(得分:0)
错误:[roles:{“无效”,[type:{:array,:map}],例如:
列表包含许多项目,例如:
Server
与您在Template中的代码相同,然后更新或创建list_params,如:
$i
我认为“sub_schema”中的字段需要通过这样的传递:
<?php
$i=1;
while (your_condition) {
?>
<input type='text' name='qqty[]' value='<?php echo $avail; ?>' id="avail<?= $i ?>" class='form-control1' readonly = 'readonly'>
<select class="form-control1" name="qty[]" id="sType" onChange="check('<?= $i ?>');">
<option value="<?php echo $avail;?>"><?php echo $Uconv;?></option>
<option value="<?php echo $qty;?>"><?php echo $uom;?></option>
</select>
//my javascript code
<script>
function check(i) {
document.getElementById("avail"+i).value = document.getElementById("sType").value;
}
</script>
<?php
$i++;
} // end while
?>