Это нормально, что после щелчка на методе Rails link_to все опции появляются в строке URL? - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть это в одном из моих представлений:

  <%= link_to "Vote up",   :url => {:controller => :votes, :action => :vote_up, :id => i.id},
                           :update => "total_value_#{i.id}",
                           :remote => true %>
  <%= link_to "Vote down", :url => {:controller => :votes, :action => :vote_down, :id => i.id},
                           :update => "total_value_#{i.id}", 
                           :remote => true %>

Когда я нажимаю сказать, Проголосовать , я получаю что-то вроде этого в URL:

http://localhost:3000/?remote=true&update=total_value_29&url%5Baction%5D=vote_up&url%5Bcontroller%5D=votes&url%5Bid%5D=29

Действие выполняется в контроллере с именем voice_controller.rb:

class VotesController < ApplicationController
  def vote_up
    check = Votes.find(:first,
                       :conditions => ["user_id = ? AND post_id = ?", session[:user_id], params[:id]])

    post = Post.find(params[:id])

    if check.nil?
      vote = Votes.new
      vote.post_id = params[:id]
      vote.user_id = session[:user_id]
      vote.value = true
      vote.save
      post.total_value += 1
      post.save
      render :text => post.total_value
    elsif check.value == false
      check.value = true
      check.save
      post.total_value += 2
      post.save
      render :text => post.total_value
    else
      render :text => "You have already voted up for this post."
    end
  end

  def vote_down
    check = Vote.find(:first,
                      :conditions => ["user_id = ? AND post_id = ?", session[:user_id], params[:id]])

    post = Post.find(params[:id])

    if check.nil?
      vote = Vote.new
      vote.post_id = params[:id]
      vote.user_id = session[:user_id]
      vote.value = true
      vote.save
      post.total_value -= 1
      post.save
      render :text => post.total_value
    elsif check.value == true
      check.value = false
      check.save
      post.total_value -= 2
      post.save
      render :text => post.total_value
    else
      render :text => "You have already voted down for this post."
    end
  end
end

Я не уверен, нормально ли это или у меня где-то есть синтаксическая ошибка?

1 Ответ

1 голос
/ 01 февраля 2012

Опции link_to просто не выглядят так, rails думает, что все опции, которые вы ему предоставляете, это опции маршрутизации

link_to 'link text', {:controller => ..., :action => ...}, {:remote => true, ...}

Больше похоже на это.Все, что не должно использоваться для создания URL-адреса, должно быть во втором хэше (в api docs )

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