Je suis un débutant RoR essayant de créer un formulaire. Je souhaite pouvoir enregistrer toutes les valeurs du formulaire et exécuter une requête de recherche sur ma base de données en fonction des valeurs avant de renvoyer une vue mise à jour. Je suis sur les rails 4, et créé un tableau de cases à cocher en utilisant ce tutoriel: https://www.youtube.com/watch?v=c2qwV0B9yfU, mais les cases à cocher ne s'affichent pas. Je n'arrive pas à trouver une solution par moi-même, alors j'espérais de l'aide.Ruby on rails 4 check_box_tag n'apparaît pas dans le formulaire
Ceci est mon form.html.erb. Il est enregistré dans les vues/page d'accueil/form.html.erb
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@homepage, url: form_path) do |f| %>
# <%= render 'shared/error_messages_form' %>
<%= f.label :dname, "Dish Name" %>
<%= f.text_field :d_name %>
<%= f.label :rname, "Restaurant Name" %>
<%= f.text_field :r_name %>
<div class="diet">
<%= f.label :violation_name, "Dietary Restriction0.5" %>
<%= hidden_field_tag "homepage[dietaryviolation_ids][]", nil %>
<% Dietaryviolation.all.each do |dietaryviolation| %>
<%= check_box_tag "homepage[dietaryviolation_ids][]", dietaryviolation.id, @homepage.dietaryviolation_ids.include?(dietaryviolation.diet), id: dom_id(dietaryviolation) %>
<%= label_tag dom_id(dietaryviolation), dietaryviolation.diet %><br>
<% end %>
</div>
<div class="food">
<%= f.label :food_name, "Restaurant Cuisine0.5" %>
<%= hidden_field_tag "homepage[restaurantcuisine_ids][]", nil %>
<% @restaurantcuisines.each do |restaurantcuisine| %>
<%= f.check_box "homepage[restaurantcuisine_ids][]", restaurantcuisine.id, @homepage.restaurantcuisine_ids.include?(restaurantcuisine.diet), id: dom_id(restaurantcuisine) %>
<%= label_tag dom_id(restaurantcuisine), restaurantcuisine.diet %><br>
<% end %>
</div>
<%= f.label "Calories"%>
<%= form_for :homepage, url: form_path do |cal| %>
<div id="calorie_slider"></div>
<%= cal.hidden_field :c_min %>
<%= cal.hidden_field :c_max %>
<% end %>
<%= f.label "Rating"%>
<%= form_for :homepage, url: form_path do |rate| %>
<div id="rating_slider"></div>
<%= rate.hidden_field :r_min %>
<%= rate.hidden_field :r_max %>
<% end %>
<%= f.label "Price Range"%>
<%= form_for :homepage, url: form_path do |price| %>
<div id="price_slider"></div>
<%= price.hidden_field :p_min %>
<%= price.hidden_field :p_max %>
<% end %>
<%= f.submit "Filter my shiz!", class: "btn btn-primary" %>
<% end %>
Le code HTML correspondant pour la section check_box_tag ressemble à ceci:
<div class="diet">
<label for="homepage_violation_name">Dietary Restriction0.5</label>
<input type="hidden" name="homepage[dietaryviolation_ids][]" id="homepage_dietaryviolation_ids_" />
</div>
<div class="food">
<label for="homepage_food_name">Restaurant Cuisine0.5</label>
<input type="hidden" name="homepage[restaurantcuisine_ids][]" id="homepage_restaurantcuisine_ids_" />
</div>
Il semble à manquer complètement les cases à cocher, donc je pense que c'est là que l'erreur est, mais je ne sais pas pourquoi il est :(passe
Le contrôleur correspondant est homepage_controller.rb
class HomepageController < ApplicationController
def index
end
def new
@homepage = Homepage.new
end
def form
@restaurantcuisines = Restaurantcuisine.select(:cuisine).distinct
@dietaryviolations = Dietaryviolation.select(:diet).distinct
@homepage = Homepage.new(homepage_params)
end
def filter
end
private
def homepage_params
params.permit(:d_name, :r_name, :c_min, :c_max, :r_min, :r_max, :p_min, :p_max, { :restaurantcuisine_ids => [] }, { :dietaryviolation_ids => [] })
end
end
J'ai créé des fonctions de CRUD pour restaurantscuisine_controller et dietaryviolations_controller, mais rien d'autre.
Le modèle de page d'accueil est lié au modèle diététique de la diététique et au modèle de restaurantscuisine à travers une relation de has-and-belongs-to-many. Les relations sont rassemblées dans des tables de jointure appelées dietaryviolations_homepages et homepages_restaurantscuisine. Je n'ai rien d'autre dans les modèles à l'exception de la ligne has_and_belongs_to_many et des contrôles de validation Accueil
class Homepage < ActiveRecord::Base
has_and_belongs_to_many :restaurantcuisine
has_and_belongs_to_many :dietaryviolation
before_save { self.d_name = d_name.downcase } if ':d_name.present?'
before_save { self.r_name = r_name.downcase } if ':r_name.present?'
validates :c_max, numericality: { only_integer: true, less_than_or_equal_to: 5000, greater_than_or_equal_to: :c_min }
validates :c_min, numericality: { only_integer: true, less_than_or_equal_to: :c_max, greater_than_or_equal_to: 0 }
validates :r_max, numericality: { only_integer: true, less_than_or_equal_to: 5, greater_than_or_equal_to: :r_min }
validates :r_min, numericality: { only_integer: true, less_than_or_equal_to: :r_max, greater_than_or_equal_to: 0 }
validates :p_max, numericality: { only_integer: true, less_than_or_equal_to: 50, greater_than_or_equal_to: :p_min }
validates :p_min, numericality: { only_integer: true, less_than_or_equal_to: :p_max, greater_than_or_equal_to: 0 }
validates_associated :restaurantecuisine
validates_associated :dietaryviolation
end
Mon fichier application.scss a les lignes suivantes:
*= require jquery-ui
*= require bootstrap-slider
*= require_tree .
*= require_self
*/
@import "bootstrap-sprockets"
@import "bootstrap"
@import url(http://www.w3schools.com/lib/w3.css)
Mon fichier application.js contient les lignes suivantes:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require bootstrap
//= require bootstrap-sprockets
//= require bootstrap-slider
//= require turbolinks
//= require_tree .
Un conseil serait apprécié! J'ai essayé plusieurs façons de faire fonctionner les cases à cocher, notamment en utilisant collection_check_box mais rien ne semble fonctionner.
J'ai mis: dietaryviolation pour: foo, @dietaryviolations pour Foo.all, et: régime pour: id et: nom car il n'y a pas une colonne: id ou: name (seulement une colonne de régime qui est essentiellement nom , et une colonne d'ingrédient qui est l'ingrédient spécifique qui viole la contrainte de régime), mais il ne montre pas encore. – tintin
Le ': id' est définitivement là. Toutes les tables dans les rails auraient automatiquement une colonne 'id' à coup sûr. Essayez de l'ajouter et de voir si cela fonctionne. – angkiki