如何将数据从控制器发送到Ruby on Rails中的视图

时间:2012-06-19 00:50:13

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个通过脚手架创建的简单控制器,并具有“显示”功能。

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

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

2 个答案:

答案 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的方式 - 这本书优秀免费