0

我想知道是否有人可以指出我正确的方向。我有服务和服务预订模型。我的 servicebooking 表包含以下字段: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 %>
4

1 回答 1

1

您没有显示您的视图,因此向您建议如何通过 hidden_​​field 之类的并不容易

#somewhere in form 
<%= hidden_field_tag 'servicebooking[service_id]', @service.try(:id)  %>
<%= hidden_field_tag 'servicebooking[service_name]', @service.try(:name)  %>

所以我可以建议你另一种方法 -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

<%= 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)  %>

或者您甚至可以在不修改任何表单的情况下传递控制器级别(在方法 new 中@service.namecurrent_user.id

@servicebooking = @service.servicebookings.new(service_name: @service.try(:name), user_id: current_user.try(:id))
于 2013-11-12T23:54:50.213 回答