我在页面上有一个表单,用户可以使用该表单来创建课程。虽然我了解如何为用户提供填写课程名称和描述等简单内容的机会,但我还想将用户的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。我是否需要在控制器中创建用户实例变量,或者我可以在视图中以某种方式使用代码。
感谢您的帮助。
答案 0 :(得分: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
答案 1 :(得分: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
。
我希望它有所帮助....