質問の最初の部分に答えるには、モデルを編集するためのリンクを確認することから始めます。インデックスビューファイル(app/views/posts/index.html.erb
)では、次のようになります。
<%= link_to 'Edit', edit_post_path(post) %>
ブラウザでインデックスページを開くと、次のようなリンクが作成されます。
http://*servername*/post/*id*/edit
リソースルーティングは、これがのedit
アクションを呼び出すことpost_controller
、およびid
値がURLにあることを認識しています。
次に、 ()のedit
アクションを見てください。次のようになります。post_controller
app/controllers/posts_controller.rb
def edit
@post = Post.find(params[:id])
end
id
これは、URLを介して渡された値を使用して、その値をPost
含むデータベースでを検索しid
、それを変数に保存するだけです@post
。編集ビューファイル(app/views/posts/edit.html.erb
)のコードを見ると、ほとんどの場合、フォーム部分(/app/views/posts/_form.html.erb
)が使用されており、そのファイルには、ブラウザに表示される実際のフォームをレンダリングするためのコードが含まれています。
<%= form_for(@post) do |f| %>
この行は@post
、アクションで設定された変数を使用してフォームの作成を開始しますPostsController
edit
。このコードのブロック内には、次のようなものがあります-
<div class="field">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
:title
このコードは、-のプロパティに関連付けられた形式でテキストフィールドを構築します@post
。そのプロパティに値が存在する場合、text_field
メソッドはテキストフィールドにその値を入力することを認識しています。
2番目の部分(「ユーザーが他のユーザーの投稿をフォームに「インポート」して編集できるようにしたい」)は、はるかに制限がなく、アプリで実際に何をしたいかに依存します。すべてのユーザーが他のすべてのユーザーの投稿を表示して直接編集します(Wikiのようなものですが、破壊的な編集が含まれます)。または、投稿を作成したユーザーだけが編集可能で、他のユーザーは表示できるようにしてから、ユーザーが別のユーザーの投稿のコンテンツを現在のユーザーが所有する新しい投稿にコピーできるようにするコントローラーアクションを作成できます。または他のもの-それは本当にあなたが望むものに依存します。