2012-07-23 37 views
5

Tôi đã cố gắng tạo và chỉnh sửa đối tượng bằng cách sử dụng chế độ xem phương thức trong chỉ mục html trong Rails. Tôi đang sử dụng twitter bootstrap trong dự án. Tôi m cho đến nay thành công trong việc tạo ra các đối tượng bằng cách sử dụng phương thức. Để mọi thứ hoạt động, tôi phải tạo một đối tượng có tên @post = Post.new trong hành động chỉ mục của mình.Tạo và chỉnh sửa đối tượng bằng cách sử dụng phương thức trong đường ray

Vì trước khi phương thức chỉnh sửa được hiển thị, đối tượng chỉnh sửa phải sẵn sàng dưới dạng @post = Post.find (params [: id]), nhưng nó xảy ra trong hành động chỉnh sửa.

Đây có phải là cách mà tôi có thể khởi tạo @post cho chế độ xem chỉnh sửa của tôi trước khi nó được hiển thị không?

Dưới đây là mã của tôi:

index.html.erb

<div class="page-header"> 
    <h1>Posts</h1> 
</div> 


<% @posts do |post| %> 
    <tr> 
    <td><%= post.name %></td> 
    <td><%= post.description %></td> 

    <td><%= link_to 'Edit', edit_post_path(post), :class => 'btn btn-mini btn-min-standard-width', :data => {:toggle => "modal", :target => "#editItemModal"} , :remote => true %> 
     <%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete, :class => 'btn btn-mini btn-danger btn-min-standard-width' %></td> 
    </tr> 
<% end %> 


<%= link_to 'New Item', new_post_path, 
     :class => 'btn btn-primary btn-standard-width' , :data => {:toggle => "modal", :target => "#newItemModal"} , :remote => true %> 





<div id="newItemModal" class="modal hide fade" > 
    <button type="button" class="close" data-dismiss="modal">×</button></h1> 
    <div class="page-header"> 
     <h1>New item </h1> 
    </div> 

    <%= render :partial => 'form' %> 
</div> 


<div id="editItemModal" class="modal hide fade" > 
    <button type="button" class="close" data-dismiss="modal">×</button></h1> 
    <div class="page-header"> 
     <h1>Edit item </h1> 
    </div> 

    <%= render :partial => 'form' %> 
</div> 

_form.html.erb

<%if @post%> 

    <%= form_for(@post, :html => { :class => 'form-horizontal', :remote => true }) do |f| %> 


    <div class="control-group"> 
     <%= f.label :name, :class => 'control-label' %> 
     <div class="controls"> 
      <%= f.text_field :name %> 
     </div> 
    </div> 
    <div class="control-group"> 
     <%= f.label :description, :class => 'control-label' %> 
     <div class="controls"> 
      <%= f.text_area :description %> 
     </div> 
    </div> 


    <div class="form-actions"> 
     <%= f.submit nil, :class => 'btn btn-primary' %> 
    </div> 


    <% end %> 
<% end %> 

PostController

class PostsController < ApplicationController 

def index 
    @post = Post.new 
    @posts = Post.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @posts } 
    end 
    end 

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

def new 
    @post = Post.new 
end 

    def edit 
    @post = Post.find(params[:id]) 
    respond_to do |format| 
     format.html 
    format.json { render json: @post } 
    end 
    end 

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

+0

Bạn có thể nhận được nhiều câu trả lời hữu ích hơn bằng cách đăng các bit mã –

+0

Câu hỏi được cập nhật với đoạn mã – random

+0

@random bạn có tìm ra câu trả lời này không? –

Trả lời

0

Miễn là tôi hiểu bạn muốn sử dụng biến thể hiện @post trong chế độ xem sửa đổi phương thức.

Mà không biết cơ sở mã của bạn, những gì tôi có thể nói:

  1. Tìm các hành động tương ứng trong bộ điều khiển đó ám chỉ rằng phương thức xem chỉnh sửa, tạo một nếu không có
  2. Khởi @post với mô hình bài viết được tìm thấy bởi id, chỉ đơn giản là sao chép và dán đó vào hành động thích hợp
  3. Gọi đó là trong phạm vi xem

Hy vọng rằng sẽ trả lời câu hỏi của bạn

+0

Vì phương thức được hiển thị trong html chỉ mục, tôi nghĩ @post phải được xác định trong hành động chỉ mục. Nhưng khi tôi nhấp vào nút mới hoặc chỉnh sửa, các hành động tương ứng sẽ được gọi. – random

+0

Render '<% = render: partial => 'form'%>' trong dạng xem chỉ mục của bạn, nơi bạn muốn xem biểu mẫu của bạn để tạo đối tượng. –

+0

Nó không giúp ích gì. bất cứ một đề nghị nào khác? – random

Các vấn đề liên quan