我是铁杆新手,有时我会卡住。非常感谢您的帮助......
这是我的webapp:http://histoiredecinqmots.herokuapp.com/index(法语)。它使用Rails 4和bootstrap(虽然很差)。我将简要描述一下:
这是"故事"的索引。故事包含文字。
当你点击一个故事(通过绿色引导程序"成功" div)时,你会在#show中找到这个故事。
#show显示故事的文字。
现在,应用程序已经完成,因此您添加的每个单词都会记录您的I.P地址。您可以在最后15个单词中添加5个单词。之后,您无法再添加任何单词(您必须等待其他人添加单词)。
我想从"成功"更改div的boostrap类的类。到"危险" 在#index 中,当你没有剩下的单词时,它会变为红色。
我在控制器中使用此代码来计算剩余的字数:
def updates_left_calculation #Calculate how many words users can input
user_ip = request.remote_ip
@last_updates_ip = Word.where(story_id: params[:id]).pluck(:ip).last(15)
@updates_left = 5 - @last_updates_ip.count(user_ip)
end
此代码用于#show,但它在#index中不起作用,我猜是因为故事情节:params [:id]'
所以我被卡住了,我不知道如何在#index中更改我的数据,具体取决于我在#show中通常使用的值......
有关其他信息:这是我在索引中显示故事的视图:
<% @sorted_stories.each do |story| %>
<br>
<div class="col-lg-offset-2 col-md-offset-1" >
<a class="btn btn-success styled" href="/stories/<%=story.id%>">
<div class="centre"><%= story.title %></div>
</a>
</div>
<% end %>
它在控制器中使用此代码:
def index #Show the stories
@stories = Story
@story = Story.new
@sorted_stories = @stories.order("id DESC").page(1).per(100) #Kaminari helpers for pagination
end
非常感谢您解决此问题的任何建议。
答案 0 :(得分:0)
将#updates_left_calculation
方法移至Story
模型,将user_ip
作为参数。然后,在索引中,使用该结果设置所需的CSS。
class Story
has_many :words, dependent: :destroy
def last_update_ips
@last_update_ips ||= words.order(desc: :id).limit(15).pluck(:ip).reverse
end
def updates_left_for(user_ip)
5 - last_update_ips.count(user_ip)
end
end
然后,您可以在控制器和/或视图中使用这两种方法中的一种/两种。
class StoriesController
def index
@user_ip = request.remote_ip
@stories = Story
@story = Story.new
@sorted_stories = @stories.order("id DESC").page(1).per(100)
end
def show
@user_ip = request.remote_ip
@story = Story.find(params[:id])
@last_update_ips = @story.last_update_ips
@updates_left = @story.updates_left(@user_ip)
end
end
对于索引视图,您可以尝试类似:
<% @sorted_stories.each do |story| %>
<br>
<div class="col-lg-offset-2 col-md-offset-1" >
<a class="btn btn-success styled <%= "danger" if story.updates_left_for(@user_ip) < 5 %>"
href="/stories/<%= story.id %>">
<div class="centre"><%= story.title %></div>
</a>
</div>
<% end %>