【发布时间】:2015-10-19 17:52:02
【问题描述】:
在我的 Rails 4 中,我有以下模型:
class Calendar < ActiveRecord::Base
has_many :administrations
has_many :users, through: :administrations
has_many :posts
has_many :comments, through: :posts
end
class Administration < ActiveRecord::Base
belongs_to :user
belongs_to :calendar
end
class Post < ActiveRecord::Base
belongs_to :calendar
has_many :comments
end
post 对象以它们所属日历的Calendars#Show 视图显示。
帖子模型有一个:approval 自定义属性。
感谢一组三个 Ajax 链接,我想从 Calendars#Show 视图更新此自定义属性,并已实现此功能,如下所示:
<%= link_to post_path(:id => post.id, "post[approval]" => "ok"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-ok"></span>
<% end %><br/>
<%= link_to post_path(:id => post.id, "post[approval]" => "edit"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-repeat"></span>
<% end %><br/>
<%= link_to post_path(:id => post.id, "post[approval]" => "remove"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
这目前工作得很好,正如我在 Rails 控制台中看到的那样,当我单击上面的链接之一时,:approval 属性已更新。
现在,在更新:approval 属性的同时,我想更新链接的样式。
例如,我希望被点击的链接变为绿色/黄色/红色(分别为第一个、第二个和第三个链接),另一个变为灰色。
我知道我必须为每种样式定义一些 CSS 类,例如:
.ok-green {
color: green;
}
.edit-yellow {
color: yellow;
}
.remove-red {
color: red;
}
.link-grey {
color: grey;
}
我不明白的是,当用户单击上述链接之一时,我将如何在我的视图中更新这些类。
————
更新:也许我可以使用 Coffeescript as recommended here 来更新链接的类。但是,Coffeescript 代码应该放在哪里?
————
更新 2:在视图中使用简单的 if else 语句,我尝试了以下操作:
<% if post.approval == "ok" %>
<span class="ok_green">
<% else %>
<span class="approval_grey" %>
<% end %>
<%= link_to post_path(:id => post.id, "post[approval]" => "ok"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-ok"></span>
<% end %>
</span><br/>
<% if post.approval == "edit" %>
<span class="edit_yellow">
<% else %>
<span class="approval_grey" %>
<% end %>
<%= link_to post_path(:id => post.id, "post[approval]" => "edit"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-repeat"></span>
<% end %>
</span><br/>
<% if post.approval == "remove" %>
<span class="remove_red">
<% else %>
<span class="approval_grey" %>
<% end %>
<%= link_to post_path(:id => post.id, "post[approval]" => "remove"), :remote => true, :method => :patch do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
</span>
这确实改变了我的链接的颜色...但仅在页面刷新后,而不是在我们单击链接时“实时”。
知道如何使用 Ajax “实时”实现类似的想法吗?
————
知道如何实现吗?
【问题讨论】:
标签: javascript css ruby-on-rails ajax ruby-on-rails-4