2012-06-19 64 views
1

我有一个简单的控制器,它是通过脚手架创建的并具有“显示”功能。如何将数据从控制器发送到Ruby on Rails中的视图

在通过脚手架创建的视图中,我有一个只出现在特定条件下的图像。

我想在控制器中设置或评估条件并将其发送到视图。 我不知道该怎么做,或者这是否是正确的方法。

+0

我建议你阅读“使用rails的敏捷web开发”,它包含了这个(以及其他许多东西)。 –

回答

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? 

..rather不是在你的控制文件中的复杂情况。这使您可以重复使用远离特定控制器的条件并使其更具可测试性。

0

如果您只想根据特定条件显示和隐藏图像,则可以使用JQuery。你不应该把任何东西放在以视图为中心的控制器中。

您还可以获取'show'中的任何数据元素的id并将其传递给JavaScript。

JQuery有show()hide()方法可以为你工作。下面是对隐藏方法的文档:​​

基本上,如果你已经为你的形象有一定的ID,你会做这样的事情:

$(document).ready(function() { 
    $("#myImage").hide(); 

    if (some_condition === true) { 
    $("#myImage").show(); 
    } 
}); 

你可以把这些代码在你的application.js文件。

我刮起了简单的jsfiddle展示一种方式来显示与按键隐藏: http://jsfiddle.net/phillipkregg/92RDS/

当然,代码可能会取决于您正在尝试做的是不同的。

如果您需要获得对象的“身份证”中的“秀”视图,比你可以在你的节目视图的底部像这样把一个脚本标签:

<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 - 只是这样做在你的轨道“秀”视图的底部:

<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 view中显示的变量。这会将它作为json对象返回,以便您可以获取id或其拥有的任何属性。

此外,如果你刚开始学习Rails的,我会推荐这本书在线:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

这就是我学到的Rails - 本书是优秀免费

相关问题