Визуализация части редактирования при выбранном значении по умолчанию - PullRequest
2 голосов
/ 17 сентября 2010

У меня есть часть в моем приложении rails, которая загружает форму голосования (это просто выбор с номерами в диапазоне от 1 до 5). Сейчас я делаю еще один фрагмент, который загружается, если пользователь уже проголосовал. Предположим, это будет EDIt, где вы выбираете значение, за которое проголосовали, и, если хотите, можете его изменить. Но по какой-то причине не работает, вот код для этого.

#Finds the vote by passing the user and the article  
<%= @vote = Vote.find_vote_by(current_user,@article) %>

#Renders the partial with the vote variable loaded up with the vote that was found
<%= render :partial => "votes/edit_vote", :locals => {:vote => @vote} %>

И это частичное

<% form_for(vote, :url => {:controller => 'votes', :action => 'edit'}) do |f| %>

<%= error_messages_for :vote %>

<p><%= f.hidden_field :article_id %></p>
<p>
  <%= f.label :value, "Value for the vote: "%>
  <%= f.select :value, {"1" => "1","2" => "2","3" => "3","4" => "4", "5" => "5"}, :selected => vote.value %>
</p>
<p>
   <%= f.submit "Cloud-it!" %>
</p>

<% end %>

Но по какой-то причине переменная голосования не содержит ничего, кроме article_id, метода значения, каких-либо идей?

EDIT1: для каждого запроса выводится отладка, которую @vote выводит (если это действительно нормальное значение)

attributes: 
created_at: 2010-09-02 14:39:04
updated_at: 2010-09-02 14:39:04
id: 1
value: 4
article_id: 1
user_id: 1
attributes_cache: {}

EDIT2

Я попытался очистить частичный код, чтобы вывести это:

<%= debug @vote%>
<%= @vote.value %>

Если я отлаживаю @vote, все получится идеально, будут все атрибуты и все такое. Но всякий раз, когда я добавляю вторую строку, она не работает, она говорит мне, что нет .value, я пробовал .id, .article, и ничто не так, как если бы его не было. Есть идеи?

EDIT3

Вот голосование

 named_scope :find_vote_by, lambda {|user,article| {:conditions => {:user_id => user, :article_id => article}}}

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Причина этого в том, что именованные области фактически возвращают именованные области, и вы не можете получить доступ к атрибутам, как если бы это был класс голосования. Я исправил это, изменив способ получения голоса и просто забыв об использовании этой именованной области. Я сделал это с помощью:

 <% @vote = current_user.votes.find_by_article_id(@article)%>

, который является методом Rails и фактически возвращает класс голосования. Затем я просто передал его в партиал, и магия сработала!

Большое спасибо тэндукам, без его помощи я бы не справился.

0 голосов
/ 18 сентября 2010

Итак, первое, что нужно исправить, это строка:

<%= @vote = Vote.find_vote_by(current_user,@article) %>

Должно быть:

<% @vote = Vote.find_vote_by(current_user,@article) %>

Первый предназначен для вывода в ERB, а второй - для выполнения произвольного кода ruby.

Затем поместите строку ниже, например, так:

<%= debug @vote %>

И убедитесь, что это вменяемое значение. Если нет, вставьте определение вашего Vote метода класса find_vote_by.

РЕДАКТИРОВАТЬ : В этом случае, вероятно, это просто потому, что использование :locals => {...} создает переменные экземпляра, поэтому вы хотите @vote в вашем партиале с формой.

...