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

如果用户名和密码的组合正确,它将创建一个session带有user_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 回答