新手 - 视图内的Rails视图

时间:2012-09-14 05:39:03

标签: ruby-on-rails ruby-on-rails-3 model-view-controller view controller

我正在尝试制作两列布局。左侧的列是导航,右侧的列是内容。

当选择相应的导航时,是否可以在右侧div中的不同时间显示show.html.erbedit.html.erbnew.html.erb,而无需重新加载整个页面?

我知道我可以使用左侧div的部分,并渲染新页面,但我想避免为每个视图单独加载页面。

项目控制器:

def index
    @item = item.find(:all, :order => "id DESC")
end

def new
    @item = item.new
end

def create
    @item = item.new(params[:item])

    if @item.save
        redirect_to root_path
    else
        render "new"
    end
end

def edit
    @item = item.find(params[:id])
end

def update
    @item = item.find(params[:id])

    if @item.update_attributes(params[:item])
        redirect_to root_path
    else
        render "index"
    end
end

HTML:

<div id="left" ">
    <p id=link_to "Current_Item", item_path %></p>
    <p id=Link_to "Add_Item", new_item_path %></p>
    <p id=Link_to "Edit_Item", edit_item_path %></p>
</div>

<div id="right">

</div>

路线档案:

resources :items

2 个答案:

答案 0 :(得分:1)

“但我试图避免单独加载页面”表示您想通过ajax而不是完整的新页面加载视图?如果是,则您的链接应为remote_link,您的观看次数应使用相应视图的内容更新div id='right'

您的链接应使用:remote=>true选项。 See the details

您的观点应该响应更新<div id="right">中的内容。

Another link here有更多见解。

答案 1 :(得分:0)

我建议修改app/views/layouts/application.html.erb,然后输入

<div id="left">
    <p><%= link_to "Current_Item", item_path %></p>
    <p><%= Link_to "Add_Item", new_item_path %></p>
    <p><%= Link_to "Edit_Item", edit_item_path %></p>
</div>


<div id="right">
    <%= yield %>
</div>
进入它。然后,应为每个适当的操作自动呈现show.html.erb, edit.html.erb, and new.html.erb视图,这些操作将被调用到页面的右侧部分。

另外,我建议使用Rails tutorial这是一个很棒的rails教程。然后转到Codeschool了解更多信息。