ruby-on-rails - 在选择默认值时呈现编辑部分

标签 ruby-on-rails ruby view voting

我的 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 %>

但出于某种原因,vote 变量不包含除 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}}}

最佳答案

其背后的原因是,命名范围实际上返回命名范围,并且您不能像访问 Vote 类那样访问属性。我通过更改检索投票的方式并忘记使用该命名范围来解决此问题。我通过使用完成它:

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

这是一个 Rails 方法,实际上返回一个投票类。然后我将它传递给部分,魔法就起作用了!

非常感谢 thenduks,没有他的帮助我做不到。

关于ruby-on-rails - 在选择默认值时呈现编辑部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737331/

相关文章:

MySQL:在 View 中将小数转换为百分比

java - 如何在android studio中添加按钮点击事件

ruby-on-rails - 使用 Rails Cucumber 测试 Facebook 登录

sql - Rails 产生多种安全问题

jquery - 在 Rails 中,如何从 Jquery 中将参数传递给 Controller ​​方法,然后获取返回值?

arrays - 将一个数组的某些元素映射到 Ruby 中的另一个数组?

ruby - 在 Apache 上运行 Ruby 应用程序

ruby-on-rails - 改变 Rails 环境。到生产

ruby - Ruby 的最佳邮政编码插件

德鲁帕尔 5 : CCK fields in custom content type