我有一个通过脚手架创建的简单控制器,并具有“显示”功能。
在通过脚手架创建的视图中,我有一个只在某种条件下出现的图像。
我想在控制器中设置或评估条件并将其发送到视图。 我不知道该怎么做或这是否是正确的方法。
答案 0 :(得分:1)
通常应使用erb或haml在视图文件中处理该条件。如果你用条件更新你的问题,那么我会看到更新我的答案以反映它。现在,我将使用一个常见的条件。
假设您只想在对象出现时显示图像。让我们假设你的对象中有一个特色字段作为标志(1,0)。
如果此对象是文章,我们可以检查视图文件中的条件。控制器将从模型中获取文章:
-# articles_controller show action
@article = Article.find(params[:id])
...
-# views/articles/show.html.erb
<% if @article.featured? %>
// show image here
<% end %>
请记住,这是一个不一定正确的示例条件。这只是为了说明我最初的方法。
我不建议您使用javascript来隐藏/显示,具体取决于这种情况,因为您可以在javascript中使用逻辑,这样可以在视图文件中轻松管理。
如果条件很复杂,您可以将其移动到模型中,然后执行以下操作:
if @article.some_complex_condition?
..而不是在控制器文件中具有那么复杂的条件。这允许您重用条件远离特定控制器并使其更易于测试。
答案 1 :(得分:0)
如果您只想根据特定条件显示和隐藏图像,则可以使用 JQuery 进行显示和隐藏。您不应该在以视图为中心的控制器中放置任何内容。
您还可以获取“show”中任何数据元素的ID,并将其传递给JavaScript。
JQuery有show()
和hide()
方法可供您使用。以下是有关隐藏方法的文档:http://api.jquery.com/hide/
基本上,如果你的图像有一定的ID,你可以这样做:
$(document).ready(function() {
$("#myImage").hide();
if (some_condition === true) {
$("#myImage").show();
}
});
您可以将该代码放入application.js
文件中。
我掀起了一个简单的JsFiddle演示了一种用按钮显示和隐藏的方法: http://jsfiddle.net/phillipkregg/92RDS/
当然,根据您的目的,代码可能会有所不同。
如果您需要在“show”视图中获取对象的“id”,那么您可以将show标签放在show view的底部,如下所示:
<script type="text/javascript">
var my_show_object = <%= @some_object.id %> //this will be the specific id of whatever the object is that you passed from the controller
alert(my_show_object); //this helps with debugging to see if you have the right id
</script>
如果您需要的不仅仅是id,并且想要获取整个Rails对象并将其表示为Javascript - 只需在rails“show”视图的底部执行此操作:
<script type="text/javascript">
var my_object = <%= @your_rails_object.to_json %>;
console.log(my_object); //This code allows you to look in the console and see exactly what your object looks like.
</script>
就像最后一个一样,@your_rails_object
是控制器中show视图中的变量。这将把它作为一个json对象返回,这样你就可以得到id或者它拥有的任何属性。
另外,如果您只是学习Rails,我会推荐这本在线书籍:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book
这就是我学习Rails的方式 - 这本书优秀和免费。