2011-11-02 81 views
2

我有一个汽车经销商和汽车的项目show.html我在页面左侧有照片库和车辆信息在右侧。车辆信息代码是在部分名为_vehicle_info和画廊是_car_gallery这看起来像这样:Rails 3渲染不同的局部使用链接

<div id="column-left"> 
    <%= render :partial => "car_gallery" %> 
</div> 
<div id="column-right"> 
    <%= render :partial => "vehicle_info" %> 
</div> 

car_gallery我只能看到12张照片的车。

问题:

我想要做的是有近car_gallery DIV的链接,当用户点击它左侧的部分vehicle_info将由局部car_gallery_all(这被替换部分包含该车的所有照片,不限于12)。 有没有简短的方法来做到这一点?请帮忙。

+0

这是一个JavaScript的事情。我为你的问题添加了jQuery标签。你需要去替换div的内容,这可以使用jQuery轻松完成。 – davidb

+0

您是否想在不刷新页面的情况下完成此操作? – meagar

+0

是的,没有刷新.. jquery标签将是一个解决方案,但我正在寻找另一种方式,如果有的话。 – rmagnum2002

回答

6

编辑,由于缺乏销售代表:

这将工作在Rails 3.1,不知道3.0或更低..

此外,davidb的答案是,如果我理解正确,负载所有的图像,无论用户是否想要查看它们 - 这种解决方案只会在用户点击链接查看时加载它们。

........... .................................................. .................

控制器
   def all_car_photos 
        ... 
        respond_to do |format| 
        format.js 
        end 
       end 

视图
  <div id="column-left"> 
       <%= render :partial => "car_gallery" %> 
      </div> 
      <div id="column-right"> 
       <%= render :partial => "vehicle_info" %> 
      </div> 
      <%= link_to "Show All Photos", path_to_controller_action(@car), { :method => :get, :remote => true} %> 

all_car_photos.js.erb
  $('#column-right').html("<%= escape_javascript(render "car_gallery_all") %>"); 

确定这样的视图包含指向该all_car_photos控制器动作的link_to方法。关键在于link_to包含:remote => true - 它使用Rails AJAX功能中的烘焙提交请求。

控制器动作做它需要做的事情,但用.js视图响应 - all_car_photos.js.erb - 这包含一行jQuery,它将'列右'div的内容替换为' car_gallery_all”部分..

现在已经晚了,但安装程序应工作..

+0

我正在尝试你的例子,我会看到结果。当我完成工作时,我会回答“回答接受”。谢谢。 – rmagnum2002

+0

不用担心。这不是复制/粘贴代码..它需要调整,但一般的想法会让你得到你想要的。 – FiveOhOne

3

添加的链接,并给出一个ID给它。你使用“#”,因为它没有有效地链接到任何东西。

<%= link_to "my link text", "#", :id => "replace_vehicle_info" %> 

然后添加一些jQuery来你public/javascript/application.js(我只是使用轨道3不是3.1,因为你的问题被标记像)来替换div的内容。

$("#replace_vehicle_info").click(function() { 
    $("#vehicle_info").replaceWith(<your html here>) 
}) 
+0

谢谢,我会试试这个作为FiveOhOne asnwer的替代品。 – rmagnum2002