Новое в jQuery / Ajax, как я могу добавить отношение пользователя к созданию нового обзора? - PullRequest
0 голосов
/ 14 марта 2011

Я пытался справиться с jQuery и следовал railscast при добавлении формы обзора Ajax add, которая отлично работает, но теперь я хотел бы добавить в нее возможность обзорапринадлежат как пользователю, так и месту проведения.

Обзоры контроллера

def create
    @review = Review.create!(params[:review])
    @review.venue = @venue
    if @review.save
      flash[:notice] = 'Thank you for reviewing this venue!'
      respond_to do |format|
        format.html { redirect_to venue_path(@venue) }
        format.js
      end
    else
      render :action => :new
    end
  end

просмотров \ обзоров \ create.js.erb

$("#new_review").before('<div id="flash_notice"><%= escape_javascript(flash.delete(:notice)) %></div>');
$("#reviews_count").html("<%= pluralize(@review.venue.reviews.count, 'Review') %>");
$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");
$("#new_review")[0].reset();

Я пробовализменив контроллер на:

  def create
    @review = @current_user.reviews.create!(params[:review])
    @review.venue = @venue
    if @review.save
      flash[:notice] = 'Thank you for reviewing this venue!'
      respond_to do |format|
        format.html { redirect_to venue_path(@venue) }
        format.js
      end
    else
      render :action => :new
    end
  end

но он просто не будет отправляться, без ошибок.

Я думаю, что у меня правильно установлены модели с помощью bound_to и has_many, я думаю, что это проблема контроллераПри необходимости я добавлю другие биты кода.

Журнал разработки

NoMethodError (undefined method `reviews' for nil:NilClass):
  app/controllers/reviews_controller.rb:14:in `create'

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Похоже, ваша ошибка связана с @current_user. Согласно вашему журналу разработки, @current_user равно nil, когда вы набираете @current_user.reviews. Я бы сказал, отследите, где установлена ​​эта переменная экземпляра @current_user, и выясните, почему она равна nil. Теперь, какую аутентификацию вы используете? Большинство плагинов аутентификации, особенно те, которые используются Райаном Бейтсом из упомянутых вами Railscasts, используют локальную переменную, скажем просто current_user, в качестве средства для доступа к вошедшему в данный момент пользователю. Я знаю, что я делаю во всем своем коде.

Итак, перепишите строку как

@review = current_user.reviews.create!(params[:review])

и посмотри, работает ли это. Если этого не произойдет, измените его обратно, а затем отследите, где этот @current_user устанавливается. Скорее всего, он установлен в before_filter :method_name в начале вашего контроллера.

0 голосов
/ 14 марта 2011

Зову творить! (с восклицательным знаком) вызовет исключение и, таким образом, прервет действие создания в случае сбоя сохранения. Проверьте ваши log / development.log на наличие этих исключений.

Используйте build вместо create и теряйте восклицательный знак.

def create
  @review = @current_user.reviews.build(params[:review])
  @review.venue = @venue
  if @review.save
    flash[:notice] = 'Thank you for reviewing this venue!'
    respond_to do |format|
      format.html { redirect_to venue_path(@venue) }
      format.js
    end
  else
    render :action => :new
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...