![](/img/trans.png)
[英]Ruby: Form not submit - ActionController::Parameters permitted: false
[英]Ruby On Rails: Parameters - Permitted: false
我的 Rails 6 應用程序中的表單有問題。
我有一個遠程表單,它通過 JSON 請求將新數據輸入到數據庫中,該表單僅使用一個參數即可工作。 這是表格:
<%= form_with(method: :post, remote: true, model: Meal.new, url: meals_path, class: "editMealsForm", data: { type: "json" }) do |f| %>
<div class="field">
<%= f.label :description, 'Beschreibung' %><br>
<%= f.text_area :description, rows: "4", placeholder: "Noch keine Mahlzeit für diesen Tag vorhanden, bitte eintragen!", class: "form-control" %>
</div>
<div class="field">
<%= f.label :allergene_ids_add, 'Allergene auswählen', class: "card-text" %><br>
<%= select_tag :allergene_ids_add, options_from_collection_for_select(@allergenes, :id, :name), multiple: true, class: "selectpicker", data: { style: "btn-success", width: "fit", live_search: "true", size: "5", title: "Allergien wählen" } %>
</div>
<% f.hidden_field :day, :value => local_assigns[:mealDay] %>
<% f.hidden_field :tip, :value => "Vollkost" %>
<%= f.submit "Speichern", class: "btn btn-primary mt-2 btn-block" %>
<% end %>
這些是我允許的參數:
def meal_params
params.require(:meal).permit(:day, :tip, :description, allergene_ids_add: [])
end
這是我的控制器操作:
def create
@meal = Meal.new(meal_params)
byebug
if @meal.save
if params[:allergene_ids_add].present?
@allergenes_to_add = Allergene.find(params[:allergene_ids_add])
@allergenes_to_add.each do |allergene|
@meal.allergenes << allergene
end
end
respond_to do |format|
format.html { redirect_to meals_path }
format.json { render json: @meal }
end
end
end
問題是,如果我點擊了創建操作,只允許描述參數,其他的只是“忽略”,所以如果我觸發提交按鈕,如果我點擊了我的 byebug 斷點,我會在控制台中得到以下輸出:
如果我看一下參數:
<ActionController::Parameters {"authenticity_token"=>"derBZeirq0bwr/FWoYRr97qUZ5p66vQc+uT+UMf5xjXXTSFEp+XOepJtGrckguGh+skWXTZ9ibHWfFTt3p80Cg==", "meal"=><ActionController::Parameters {"description"=>"test"} permitted: false>, "commit"=>"Speichern", "controller"=>"meals", "action"=>"create"} permitted: false>
或者只是在膳食參數:
<ActionController::Parameters {"description"=>"test"} permitted: true>
如果我運行@meal.valid?
它返回true,所以我看不出問題出在哪里。
此外,如果我檢查表單中隱藏字段的值,它們會被填充而不是零。
那么為什么這一個參數有效,但即使我在我的 meal_params 方法中得到了它們,其余的參數也是不允許的?
好吧,我傻了。 我只是忘記了隱藏字段的=
。
所以而不是:
<% f.hidden_field :day, :value => local_assigns[:mealDay] %>
<% f.hidden_field :tip, :value => "Vollkost" %>
它應該是:
<%= f.hidden_field :day, :value => local_assigns[:mealDay] %>
<%= f.hidden_field :tip, :value => "Vollkost" %>
然后一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.