Rails - 根据#view中的数据更改#index中的数据

时间:2016-02-03 16:56:56

标签: ruby-on-rails twitter-bootstrap ruby-on-rails-4

我是铁杆新手,有时我会卡住。非常感谢您的帮助......

这是我的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

非常感谢您解决此问题的任何建议。

1 个答案:

答案 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 %>