2 votes

Transmettre une valeur via hidden_field en rails

Je suis en train d'essayer d'implémenter un système de notation dans mon application, j'ai essayé Rateit mais je n'ai pas réussi à le faire fonctionner, alors j'ai pensé essayer de construire le mien, en plus de cette façon j'espère apprendre beaucoup plus en comprenant le processus

Actuellement, j'essaie de transmettre la valeur de l'étoile cliquée

Formulaire

<%= form_for @rating do |f| %>
  <%= f.hidden_field :ratings, :id => "hiddenRating", :value => '' %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :recipe_id, :value => @recipe.id %>

  <%= f.submit "Soumettre" %>
<% end %>

JS

$(document).ready(function(){
  $('#firstStar').click(function(){
    $('#hiddenRating').value = 1;
  });
}); 

Donc l'idée est que si un utilisateur clique sur la première étoile, une valeur de 1 doit être transmise en tant que valeur de notation dans le formulaire, cela ne se produit pas car je ne sais pas quoi passer

:value => ''

Je suis sûr qu'il y a des moyens beaucoup meilleurs de le faire, mais comme je l'ai dit je veux apprendre morceau par morceau pour qu'à la fin je puisse tout assembler, bien sûr si quelqu'un a une meilleure suggestion alors s'il vous plaît laissez-moi savoir.

Édition

Contrôleur

def new
  @rating = Rating.new

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @rating }
  end
end

def create
  @rating = Rating.new(params[:rating])

  respond_to do |format|
    if @rating.save
      format.html { redirect_to @rating, notice: 'La notation a été créée avec succès.' }
      format.json { render json: @rating, status: :created, location: @rating }
    else
      format.html { render action: "new" }
      format.json { render json: @rating.errors, status: :unprocessable_entity }
    end
  end
end

2voto

Richlewis Points 3913

D'accord, j'espère que cela pourra aider quelqu'un d'autre dans une situation similaire, mon formulaire ressemble maintenant à ceci

<%= f.hidden_field :ratings, :id => "hiddenRating"%>#La valeur a été supprimée

Et mon Jquery ressemble à ceci

$(document).ready(function(){
 $('#firstStar').click(function(){
  $('#hiddenRating').val(1);
 });
});

Il n'était pas nécessaire de transmettre la valeur dans le formulaire car .val() l'assigne à l'id

C'est du moins ce que je pense

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X