0

今日はRuby+Railsを試しています。

標準UserMicropostモデル、ビュー、コントローラーを作成した後、ユーザーとして新しいマイクロポストを追加できるページを追加したいと思いました。

今のところ、実際には認証が行われていないので、URLを介してユーザーIDを取得できるページがあり、マイクロポストを入力できるテキストボックスの形式だけがあります。サイトに追加します。

私はすでに必要なルーティングを配線しました:

match 'users/new_micropost/:user_id' => 'Users#new_micropost'

コントローラーのコードと同様に:

def new_micropost
  @user = User.find(params[:user_id])
  @micropost = Micropost.new #still not so sure about this
end

貼り付けmicroposts/new.html.erbたファイルを次の名前の新しいファイルにコピーしましたusers/new_micropost.html.erb

<h1>New <%= @user.name %>'s micropost</h1> #added this thingy

<%= render 'form' %>

<%= link_to 'Back', users_path %>

<%= render 'form' %>サイトに投稿したいマイクロポストと送信ボタンを尋ねるテキストボックスのみを印刷するための慣用的な方法を置き換える最良の方法は何でしょうか。

ありがとう

4

2 に答える 2

2

@micropostフォームの場合は、次のような変数を渡して、独自のフォームを作成するだけです。

<%= form_for @micropost do |f| %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= f.submit "Post" %>
<% end %>

詳細については、これらのガイドをご覧くださいcreateこのアクションのために、コントローラーで別のアクションを作成する必要がある場合があります。

また、マイクロポストをユーザーに関連付ける場合は、以下を追加する必要があります。

class User < ActiveRecord::Base
  has_many :microposts, :dependent => :destroy
end

class Micropost < ActiveRecord::Base
  belongs_to :user
end

次に、新しいものを変更して、次のようなアクションを作成します。

def new_micropost
  @user = User.find(params[:user_id])
  @micropost = @user.microposts.build
end

def create_micropost
  @user = User.find(params[:user_id])
  @micropost = @user.microposts.build(params[:micropost])
  if @micropost.save
    redirect_to some_path
  else
    render 'new_micropost'
  end
end

アソシエーションの詳細については、ここをクリックしてください

正しいコントローラーに送信するには、フォームを更新する必要がある場合があることに注意してください。<%= form_for @micropost, url: create_micropost_path(@user.id) do |f| %>

于 2013-02-11T01:54:27.140 に答える
1

Railsには、リソースの作成、読み取り、更新、削除に関連する、コントローラーの7つの標準アクションがあります。newMicropostsControllerのアクションに名前を付けると便利です。タグを使用form_forして、送信およびキャンセル用のテキスト領域とボタンのペアを作成できます。例:

<%= form_for @micropost do |f| %>
   <%= f.label :content %>
   <%= f.text_area :content %>
   <%= f.submit %>

<% end %>

しかし、動きを学ぶ最も簡単な方法は、次のようなRailsジェネレーターを使用することです。

rails generate scaffold Micropost content:text
于 2013-02-11T01:47:08.470 に答える