Ruby on rails Rails 4如何从表单中的另一个控制器获取id

Ruby on rails Rails 4如何从表单中的另一个控制器获取id,ruby-on-rails,Ruby On Rails,我们有一个表单可以创建与分支机构的约会,此表单需要保存当前用户的id和与之约会的分支机构的id。但是,我们无法确定如何保存分支id 访问_controller.rb: class VisitsController < ApplicationController before_filter :authenticate_user!, except: [ :new] before_action :set_visit, only: [:show, :edit, :update, :dest

我们有一个表单可以创建与分支机构的约会,此表单需要保存当前用户的id和与之约会的分支机构的id。但是,我们无法确定如何保存分支id

访问_controller.rb:

class VisitsController < ApplicationController
  before_filter :authenticate_user!, except: [ :new]
  before_action :set_visit, only: [:show, :edit, :update, :destroy]

  # GET /visits
  # GET /visits.json
  def index
    @visits = Visit.all
    @visits_by_date = @visits.group_by(&:date_from)
    @date = params[:date] ? Date.parse(params[:date]) : Date.today
    @users = User.all

  end

  # GET /visits/1
  # GET /visits/1.json
  def show
  end

  # GET /visits/new
  def new
    @visit = Visit.new
    @branch = Branch.all


    end

  # GET /visits/1/edit
  def edit
  end

     # POST /visits
     # POST /visits.json
      def create
    @visit = Visit.new(visit_params)
    @visit.branch_id = Branch.where(:id => params[:branch_id])
    @visit.user_id = current_user.id if current_user
    respond_to do |format|
      if @visit.save
       format.html { redirect_to @visit, notice: 'Visit was successfully created.' }
      format.json { render :show, status: :created, location: @visit }
  else
       format.html { render :new }
       format.json { render json: @visit.errors, status: :unprocessable_entity }
      end
    end
  end




  # PATCH/PUT /visits/1
  # PATCH/PUT /visits/1.json
  def update
    respond_to do |format|
      if @visit.update(visit_params)
        format.html { redirect_to @visit, notice: 'Visit was successfully updated.' }
        format.json { render :show, status: :ok, location: @visit }
      else
        format.html { render :edit }
        format.json { render json: @visit.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /visits/1
  # DELETE /visits/1.json
   def destroy
    @visit.destroy
    respond_to do |format|
       format.html { redirect_to visits_url, notice: 'Visit was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_visit
      @visit = Visit.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def visit_params
      params.require(:visit).permit(:location, :date_from, :time_from, :date_to, :time_to, :comment, :branch_id, :user_id)
    end
  end
class VisitControllerparams[:branch\u id])
@visit.user\u id=当前用户,如果当前用户
回应待办事项|格式|
如果@visit.save
format.html{将_重定向到@visit,注意:'访问已成功创建。}
format.json{render:show,status::created,location:@visit}
其他的
format.html{render:new}
format.json{render json:@visit.errors,status::unprocessable_entity}
结束
结束
结束
#补丁/放置/访问/1
#PATCH/PUT/visions/1.json
def更新
回应待办事项|格式|
if@visit.update(访问参数)
format.html{将_重定向到@visit,注意:'visit已成功更新。}
format.json{render:show,status::ok,location:@visit}
其他的
format.html{render:edit}
format.json{render json:@visit.errors,status::unprocessable_entity}
结束
结束
结束
#删除/访问/1
#删除/visions/1.json
def销毁
@拜访,毁灭
回应待办事项|格式|
format.html{重定向到访问地址,注意:'访问已成功销毁。}
format.json{head:no_content}
结束
结束
私有的
#使用回调在操作之间共享公共设置或约束。
def set_访问
@visit=visit.find(参数[:id])
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
def访问参数
参数require(:visit).permit(:location,:date_from,:time_from,:date_to,:time_to,:comment,:branch_id,:user_id)
结束
结束
visit.rb:

class Visit < ActiveRecord::Base
    belongs_to :branch  
    belongs_to :user #:as => 'created_by' 
    validates_uniqueness_of :time_from, :scope => [:date_from, :location], :message=>"slot is already taken on selected date"

end  
课堂访问“创建人”
验证以下项的唯一性::time\u from,:scope=>[:date\u from,:location],:message=>“插槽已在所选日期占用”
结束
new.html.erb:

<h1>New Visit</h1>

<%= render 'form' %>

<%= link_to 'Back', visits_path %>
<% if user_signed_in? && current_user.user_type == 'client' %>


<%= form_for @visit do |f| %>
  <% if @visit.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@visit.errors.count, "error") %> prohibited this visit from being saved:</h2>

      <ul>
      <% @visit.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>


  <div class="field">
    <%= f.label :location, "Please Pick Service Provider/Branch you would like to visit:" %><br>
    <%= f.collection_select(:location, Branch.all, :branch_name, :branch_name_select, {prompt: "Select the Branch/Service"}, {:required => true}) %>
  </div>
  <div class="field">
     <%= f.label :date_from, "Please Pick Visit Date From:" %><br>
     <%= f.text_field :date_from, :required => true %>
  </div>
  <div class="field">
    <%= f.label :time_from, "Please Pick Visit Start Time:" %><br>
    <%= f.time_select :time_from, {:start_hour => 9, :end_hour => 20, :minute_step => 15,  :ampm => true}, :required => true %>
   </div>
  <div class="field">
    <%= f.label :date_to, "Please Pick Visit Date From:" %><br>
    <%= f.text_field :date_to %>
   </div>
  <div class="field">
    <%= f.label :time_to, "Please Pick Visit End Time:" %><br>
    <%= f.time_select :time_to, {:start_hour => 9, :end_hour => 20, :minute_step => 15, :ampm => true} %>
  </div>
   <div class="field">
    <%= f.label :comment, "If you have any specific requirements for your visit please let us now and leave the comment below:" %><br>
    <%= f.text_area :comment %>
  </div>

  <div class="field">
    <%= f.label :branch_id %><br>
    <%= f.hidden_field :branch_id %>
   </div>

  <div class="field">
    <%= f.label :user_id %><br>
    <%= f.hidden_field :user_id, :value => current_user.id %>
   </div>

   <div class="actions">
    <%= f.submit "Submit Visit Request"%>
   </div>
<% end %>

 <% end %>
新访问
_form.html.erb:

<h1>New Visit</h1>

<%= render 'form' %>

<%= link_to 'Back', visits_path %>
<% if user_signed_in? && current_user.user_type == 'client' %>


<%= form_for @visit do |f| %>
  <% if @visit.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@visit.errors.count, "error") %> prohibited this visit from being saved:</h2>

      <ul>
      <% @visit.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>


  <div class="field">
    <%= f.label :location, "Please Pick Service Provider/Branch you would like to visit:" %><br>
    <%= f.collection_select(:location, Branch.all, :branch_name, :branch_name_select, {prompt: "Select the Branch/Service"}, {:required => true}) %>
  </div>
  <div class="field">
     <%= f.label :date_from, "Please Pick Visit Date From:" %><br>
     <%= f.text_field :date_from, :required => true %>
  </div>
  <div class="field">
    <%= f.label :time_from, "Please Pick Visit Start Time:" %><br>
    <%= f.time_select :time_from, {:start_hour => 9, :end_hour => 20, :minute_step => 15,  :ampm => true}, :required => true %>
   </div>
  <div class="field">
    <%= f.label :date_to, "Please Pick Visit Date From:" %><br>
    <%= f.text_field :date_to %>
   </div>
  <div class="field">
    <%= f.label :time_to, "Please Pick Visit End Time:" %><br>
    <%= f.time_select :time_to, {:start_hour => 9, :end_hour => 20, :minute_step => 15, :ampm => true} %>
  </div>
   <div class="field">
    <%= f.label :comment, "If you have any specific requirements for your visit please let us now and leave the comment below:" %><br>
    <%= f.text_area :comment %>
  </div>

  <div class="field">
    <%= f.label :branch_id %><br>
    <%= f.hidden_field :branch_id %>
   </div>

  <div class="field">
    <%= f.label :user_id %><br>
    <%= f.hidden_field :user_id, :value => current_user.id %>
   </div>

   <div class="actions">
    <%= f.submit "Submit Visit Request"%>
   </div>
<% end %>

 <% end %>

禁止保存此访问:

真})%%>
正确%>
9、:end_hour=>20、:minute_step=>15、:ampm=>true}、:required=>true%>

9,:end_hour=>20,:minute_step=>15,:ampm=>true}%>


当前用户id%>
忘掉“其他控制器”。您可以通过参数发送一些值,并使用这些值创建@visit对象。在控制器的“创建”操作中,您只需执行以下操作:

@visit = current_user.visits.new(visit_params)
if @visit.save
...etc
用于构建@visit对象的所有数据都可以通过参数传递。如果要设置分支id,只需确保从表单中将
params[:visit][:branch\u id]
设置为正确的值。

忘记“其他控制器”。您可以通过参数发送一些值,并使用这些值创建@visit对象。在控制器的“创建”操作中,您只需执行以下操作:

@visit = current_user.visits.new(visit_params)
if @visit.save
...etc

用于构建@visit对象的所有数据都可以通过参数传递。如果要设置分支机构id,只需确保表单中的
params[:visit][:branch\u id]
设置为正确的值。

表单中
代码中,为
集合选择提供的属性是
位置
而不是
分支机构id
。将其设置为
branch\u id
并在控制器中使用
params[:visit][:branch\u id]
表单中
代码中,指定给
集合\u select
的属性为
位置
分支\u id
。将其设置为
branch\u id
,并使用
params[:visit][:branch\u id]
在控制器中访问它。感谢您的响应,我唯一不明白的是将“params[:visit][:branch\u id]”放在哪里。我假设它在控制器的某个地方,是否在def create下?它应该已经在params中,并且是您的
visit_params
方法中白名单中的参数之一。当他们在您的表单中选择一个分支时,您让它在
params[:visit][:location]
中发送它,这实际上应该是
params[:visit][:branch\u id]
branch\u id
location
之间有什么区别?感谢您的回复,我唯一不明白的是“params[:visit][:branch\u id]”应该放在哪里。我假设它在控制器的某个地方,是否在def create下?它应该已经在params中,并且是您的
visit_params
方法中白名单中的参数之一。当他们在您的表单中选择一个分支时,您让它在
params[:visit][:location]
中发送它,这实际上应该是
params[:visit][:branch\u id]
分支机构id
位置
之间有什么区别?