我想知道是否有人可以指出我正确的方向。我有服务和服务预订模型。我的服务预订表包含字段:id,service_name,service_id,date,time和user_id。我的服务视图页面上有一个“预订服务”链接,在保存预订时,我想将当前服务名称和ID保存到servicebookings表和当前用户ID。
下面是我的服务控制器创建操作,但我不知道如何去做,我知道我需要访问服务ID和名称参数可能通过隐藏字段等,可以在这里有任何帮助吗?谢谢你的帮助。
服务有很多服务预订,用户有很多服务和服务预订。 服务和服务预订属于用户。
def create
@servicebooking = current_user.servicebookings.build(params[:servicebooking].permit(:service_id, :date, :time, :user_id))
@servicebooking = //Need some help here
if @servicebooking.save
redirect_to @servicebooking
else
render 'new'
end
end
//////编辑 - 我的服务显示视图
<h2><%= @service.name %></h2><%= link_to 'Book this service', new_servicebooking_path %>
<p>
<strong>Name:</strong>
<%= @service.name %>
</p>
<p>
<strong>Date Available:</strong>
<%= @service.date_available %>
</p>
<p>
<strong>Time Available:</strong>
<%= @service.time_available %>
</p>
////// EDIT2我的服务编辑视图
<%= form_for @servicebooking, :html => { :multipart => true } do |f| %>
<% if @servicebooking.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(@servicebooking.errors.count, "error") %> prohibited
this service booking from being saved:</h2>
<ul>
<% @servicebooking.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :date %><br>
<%= f.text_area :date %>
</p>
<p>
<%= f.label :time %><br>
<%= f.text_area :time %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
答案 0 :(得分:1)
您没有显示您的观点,因此要向您推荐如何传递hidden_field(如
)并不容易#somewhere in form
<%= hidden_field_tag 'servicebooking[service_id]', @service.try(:id) %>
<%= hidden_field_tag 'servicebooking[service_name]', @service.try(:name) %>
所以我可以提出另一种方法 - 在Servicebooking模型中挂钩after_validation
belongs_to :service #i hope you have this row?
#...
after_validation :set_service_name
def set_service_name
self.service_name = service.try(:name)
end
service_id
可以(必须)通过belongs_to
关联设置,或者您可以将其添加到上面的方法
<强>更新强>
假设您拥有Service
模型
has_many :servicebookings
从服务秀视图 1,您需要通过:service_id
new_servicebooking_path
param
<%= link_to 'Book this service', new_servicebooking_path(service_id: @service.id) %>
2在控制器的@service
方法中定义new
变量
def new
@service = Service.find(params[:service_id])
@servicebooking = @service.servicebookings.new
end
3插入编辑表单这两行
<%= f.hidden_field :service_name, @service.try(:name) %>
<%= f.hidden_field :user_id, current_user.try(:id) %>
或者你甚至可以在控制器级别(方法新)中传递@service.name
和current_user.id
而不进行任何形式修改
@servicebooking = @service.servicebookings.new(service_name: @service.try(:name), user_id: current_user.try(:id))