Ruby on rails 从form_标记和modal传递给控制器的值错误

Ruby on rails 从form_标记和modal传递给控制器的值错误,ruby-on-rails,Ruby On Rails,我有一个包含此代码的索引视图 <% @jobs.each do |job| %> ... <div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> <div class="modal__overlay" tabindex="-1" data-micromodal-close> <div class="modal__co

我有一个包含此代码的索引视图

 <% @jobs.each do |job| %>
   ...
   <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
          <div class="modal__overlay" tabindex="-1" data-micromodal-close>
            <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
              <header class="modal__header">
                <h3 class="modal__title" id="modal-1-title">
                  Share Job
                </h3>
                <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
              </header>
              <main class="modal__content" id="modal-1-content">
                <p>
                Enter an email address below to share this job to a friend.
                <%= form_tag({controller: "jobs",
                              action: "email_job",
                              job_id: job.id},
                              method: "post") do %>
                <p><%= text_field_tag(:email_address, nil, placeholder: 'Email Address', :job_id => job.id)%></p>
                <p><%= text_area(:message, :text, placeholder: 'Optional Message',  size: "30x10") %></p>
                <p><button class="btn">Send</button></p>
              <% end %>
                </p>
              </main>
            </div>
          </div>
        </div>
     ...

...
分担工作

在下面输入电子邮件地址以将此作业共享给朋友。
作业id)%>

发送

...

因此,对于每个作业,我都有一个共享链接,当用户单击该链接“共享”作业时,他们会得到一个显示表单的模式弹出窗口。我的问题是
job.id
为每个作业返回相同的作业id(数据库中的第一个作业)。

您可以将其设置为普通嵌套资源并使用虚拟模型:

resources :jobs do
  resources :shares
end
除了调用
valid?
而不是保存之外,该控制器只是普通的嵌套CRUD控制器

class SharesController < ApplicationController
  before_action :set_job
  # POST /jobs/:job_id/shares
  def create
    if @share.valid?
      # @todo send email
      redirect_to @job, success: 'Job shared'
    else
      render :new
    end
  end
  private
  def set_job
    @job = Job.find(params[:job_id])
  end

  def job_params
    params.require(:share).permit(:email_address, :message)
  end
end
class SharesController
您可以将其设置为普通嵌套资源并使用虚拟模型:

resources :jobs do
  resources :shares
end
除了调用
valid?
而不是保存之外,该控制器只是普通的嵌套CRUD控制器

class SharesController < ApplicationController
  before_action :set_job
  # POST /jobs/:job_id/shares
  def create
    if @share.valid?
      # @todo send email
      redirect_to @job, success: 'Job shared'
    else
      render :new
    end
  end
  private
  def set_job
    @job = Job.find(params[:job_id])
  end

  def job_params
    params.require(:share).permit(:email_address, :message)
  end
end
class SharesController
这是一个模式问题,模式代码需要唯一的id。请参阅下面我的解决方案。注:我为id添加了
id=“modal-”

  <div class="modal micromodal-slide" id="modal-<%=job.id%>" aria-hidden="true">
              <div class="modal__overlay" tabindex="-1" data-micromodal-close>
                <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-<%=job.id%>-title">
                  <header class="modal__header">
                    <h3 class="modal__title" id="modal-<%=job.id%>-title">
                      Share Job
                    </h3>
                    <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
                  </header>
                  <main class="modal__content" id="modal-<%=job.id%>-content">
                    <p>
                    Enter an email address below to share this job to a friend.
                    <%= form_tag({controller: "jobs",
                                  action: "email_job",
                                  job_id: job.id},
                                  method: "post") do %>
                    <p><%= text_field_tag(:email_address, nil, placeholder: 'Email Address', :job_id => job.id)%></p>
                    <p><%= text_area(:message, :text, placeholder: 'Optional Message',  size: "30x10") %></p>
                    <p><button class="btn">Send</button></p>
                  <% end %>
                    </p>
                  </main>
                </div>
              </div>
            </div>

分担工作

在下面输入电子邮件地址以将此作业共享给朋友。
作业id)%>

发送


这是一个模式问题,模式代码需要唯一的id。请参阅下面我的解决方案。注:我为id添加了
id=“modal-”

  <div class="modal micromodal-slide" id="modal-<%=job.id%>" aria-hidden="true">
              <div class="modal__overlay" tabindex="-1" data-micromodal-close>
                <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-<%=job.id%>-title">
                  <header class="modal__header">
                    <h3 class="modal__title" id="modal-<%=job.id%>-title">
                      Share Job
                    </h3>
                    <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
                  </header>
                  <main class="modal__content" id="modal-<%=job.id%>-content">
                    <p>
                    Enter an email address below to share this job to a friend.
                    <%= form_tag({controller: "jobs",
                                  action: "email_job",
                                  job_id: job.id},
                                  method: "post") do %>
                    <p><%= text_field_tag(:email_address, nil, placeholder: 'Email Address', :job_id => job.id)%></p>
                    <p><%= text_area(:message, :text, placeholder: 'Optional Message',  size: "30x10") %></p>
                    <p><button class="btn">Send</button></p>
                  <% end %>
                    </p>
                  </main>
                </div>
              </div>
            </div>

分担工作

在下面输入电子邮件地址以将此作业共享给朋友。
作业id)%>

发送


我在上面添加了模式代码。我想我需要一个或多个div的唯一id。我在上面添加了模式代码。我想我需要一个或多个div的唯一id。谢谢这个max…这是一个有趣的方法。很抱歉这么麻烦,但我的问题是我使用的模式。请看我发布的解决方案。谢谢这个max…这是一个有趣的方法。很抱歉这么麻烦,但我的问题是我使用的模式。请参阅我发布的解决方案。