0

ユーザーがコースを作成するために使用できるページにフォームがあります。ユーザーにコース名や説明などの簡単な情報を入力する機会を提供する方法は理解していますが、ユーザーの ID を teacher_id 列に割り当てたいとも考えています。これはユーザーに対して自動的に行われるべきであり、teacher_id は自分の ID であるべきであるため、割り当てる機会が表示されないようにする必要があります。

現在、「コースの作成」ページのビューは次のとおりです。

<% provide(:title, 'My Classes') %>
<h1>Create a class!</h1>

<div class="row">
   <div class="span6 offset3">
     <%= form_for(@course) do |f| %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :description %>
      <%= f.text_area :description, :size => "30x6" %>

      <!-- Assign the current user's id to the teacher_id column in the background -->

      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
     <% end %>
  </div>
</div>

コースコントローラーの新しいアクションは次のようになります。

def new
    @course = Course.new
end

私がやりたいことを達成するための最良の方法は何ですか? 私は Rails にかなり慣れていないので、フォームやすべての可能性についてあまり経験がありません。hidden_​​field_tag について少し読みましたが、それが必要なものであるかどうかはわかりません。とにかくフォームでユーザーの ID を取得するのが難しいと感じていました。コントローラーでユーザーインスタンス変数を作成する必要がありますか、それともビュー内のコードでそれを行うことができますか?

助けてくれてありがとう。

4

2 に答える 2

1

おそらく、次のような作成アクションがあります。

def create
  @course = Course.new(params[:course])
end

@current_userの変数が使用可能であるとすると、新しいコースを保存する前に、コントローラーでそれを設定できるはずです。

def create
  @course = Course.new(params[:course])
  @course.teacher_id = @current_user.id
  @course.save
  redirect_to :action => "show", :id => @course.id
end
于 2012-06-22T20:07:49.100 に答える
1

hidden_​​fieldを使用できます:

<% provide(:title, 'My Classes') %>
 <h1>Create a class!</h1>

<div class="row">
   <div class="span6 offset3">
     <%= form_for(@course) do |f| %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :description %>
      <%= f.text_area :description, :size => "30x6" %>

      <%= f.hidden_field :teacher_id, :value => :current_user.id %>

      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
     <% end %>
  </div>
</div>

編集- フォームで利用可能にする方法を説明しますcurrent_user

通常、sessionユーザーのログインとログアウトを担当するコントローラーがありsession、ユーザーをログイン状態に保つために を作成します。

作成アクションの例:

  def create
    user = User.find_by_name(params[:name])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      flash[:success] = "Welcome " + current_user.name
      redirect_to user
    else
      flash.now[:error] = "Invalid username/password combination."
      render "new"
    end
  end

ユーザー名とパスワードの組み合わせが正しい場合、( ) で が作成さsessionuser_idますsession[:user_id]。さて、あなたapplication_controllerは以下のようなものを持つことができます:

private
def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

helper_methodを使用すると、アプリケーションのcurrent_user任意のコントローラーまたはビューで を使用できます。

お役に立てば幸いです....

于 2012-06-22T20:09:59.350 に答える