Почему Rails игнорирует мои параметры для этой отправки формы? - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь отправить простую форму в Rails 3 для использования с плагином act_as_commentable.

#new_comment_box
  #comment_input_box
    = form_for :comment,  :url => comments_path(commentable.class.to_s.underscore, commentable.id), :html => {:id => "new_comment"}, :remote => true do |f| 
      #share-input
        = f.text_area :comment, :id => 'comment-input', :'data-text' => "Comment on this review...", :placeholder => "Comment on this review..."
        .cancel
      .clear
      = f.submit 'Comment', :id => 'item-comment-submit', :class => "button"

      .clear

Модель "Мой комментарий" имеет текстовый атрибут "комментарий", и Мой контроллер довольно прост:

class CommentsController < ApplicationController
  before_filter :load_commentable

  def create
    pp params[:comment]
    @comment = @commentable.comments.build(params[:comment])
    @comment.user = current_user
    respond_to do |format|
      if @comment.save
        format.html {render :partial => 'comments/comment', :locals  => {:commentable  => @commentable, :comment => @comment}}
      end
    end
  end

  def destroy
    @comment = @commentable.comments.find(params[:id])    
    @comment.destroy
        respond_to do |format|
      format.json {render :json => params[:id]}
    end 
  end

protected

  def load_commentable
    @commentable = params[:commentable_type].camelize.constantize.find(params[:commentable_id])
  end
end

Вот сгенерированный HTML:

   <form accept-charset="UTF-8" action="/item/252/comments" data-remote="true" id="new_comment" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="cXgXwhXdMMV38Ye/fIVVrke8pH7iZE/iFY+z4oO2Szs=" /></div> 
        <div id='share-input'> 
          <textarea cols="40" data-text="Comment on this review..." id="comment-input" name="comment[comment]" placeholder="Comment on this review..." rows="20"></textarea> 
          <div class='cancel'></div> 
        </div> 
        <div class='clear'></div> 
        <input class="button" id="item-comment-submit" name="commit" type="submit" value="Comment" /> 
        <div class='clear'></div> 
    </form> 

и мои маршруты выглядят так:

POST   /:commentable_type/:commentable_id/comments(.:format)          {:action=>"create", :controller=>"comments"}

Тем не менее, когда я пытаюсь отправить эту форму, журнал рельсов не обнаруживает ничего отправляемого:

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"cXgddasdMMV38Ye/fIVVrkdfsdpH7iZE/iFYsdfsdfz4oO2Szs=", "comment"=>{"comment"=>""}, "commit"=>"Comment", "commentable_type"=>"item", "commentable_id"=>"252"}

Кроме того, из firebug выглядит так, будто запрос даже не отправляет комментарии со страницы.

Может кто-нибудь сказать мне, что я делаю неправильно, и почему это не работает?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Итак, вы сами выяснили, почему это не сработало, и это хорошо.

Вам не нужно указывать этот атрибут id, так как он уже будет иметь атрибут с именем comment_comment на основеНазвание поля.Лучше не связываться с этим.

К сожалению, я не знаю ответа относительно , почему не принимал этот странно названный параметр.Код, вероятно, находится в файле rails.js или jquery_ujs.js в вашем приложении.

1 голос
/ 02 августа 2011

По какой-то причине ... ему не нравилось иметь идентификатор textarea в качестве "комментария-ввода".Когда я изменил его на "comment_comment", он сработал ... все равно хотел бы получить объяснение, почему, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...