rails 3,如何通过form_for发送对象名称并创建关系?

时间:2011-12-13 23:38:30

标签: ruby-on-rails ruby-on-rails-3

所以我认为这很简单,但我还没想出来。

我有一个超级简单的form_for:     <%= form_for @redemption do | f | %GT;

       <%= f.text_field :code  %> 
        <%= f.submit 'Submit' %>
       <% end %>

用户输入代码并将其发送到兑换#create action

def create
     @code = Code.find_by_id('6')
     @redemption = @code.redemptions.find_or_create_by_code_id_and_user_id(@code.id, current_user.id) 
      if @redemption.save
        redirect_to bands_url, :notice => "Redemption Successful."
      else
        redirect_to bands_url, :notice  => "Could not redeem code"
      end
  end

此代码可以正常工作,但由于在那里对ID进行硬编码,显然无法生产。

我没有得到的部分是:如何通过表单发送Code.code并以某种方式获取该代码的.id。我知道如何将其传递给救赎......

想法?

1 个答案:

答案 0 :(得分:1)

您的表单将通过params。您提到“如何发送Code.code”这是否意味着您的redemption[:code]与此Code.code相同,您从中获取Code.id? (在你的例子中为6)。

如果使用类似

的话
def create
  @code = Code.find_by_code(params[:redemption][:code]) # just to show you how to use it
  @redemption = @code.redemptions.find_or_create_by_user_id(current_user.id) # that part looked redundant but i don't know what you're trying to do.
  if @redemption.save
    redirect_to bands_url, :notice => "Redemption Successful."
  else
    redirect_to bands_url, :notice  => "Could not redeem code"
  end
end