我对滚动和编程很新。我觉得我已经很好地掌握了MVC和其他概念,但仍然很难弄清楚控制器动作的语法。例如,当您创建
时def edit
end
您如何知道如何格式化该方法的内容/内部。
到目前为止,我已经看到了很多这样的事情:
def new
@product = Product.new
end
如果我理解正确的话,那就是创建一个产品模型的实例,并将其放入一个可以通过products / view中的“new”视图访问的实例变量
但是,我想说我想编辑它。我倾向于在控制器中添加以下操作:
def edit
@product = Product.edit
end
我不确定语法Product.edit
是否正确,但不确定如何区分编辑和更新。在创建实例变量时,如何知道对模型对象的调用?在网上有什么我可以去学习吗?到目前为止,我找不到任何可以使用的命令列表。
答案 0 :(得分:1)
def edit
@product = Product.edit
end
应该是
def edit
@product = Product.find(params[:id])
end
简单的解释
调用e.q localhost:3000/products/1/edit
1
是您的产品的ID,传递给您的控制器,可以使用参数访问。
当用户点击编辑时。它通常会将数据发送到更新操作
def update
@product = Product.find(params[:id])
@product.update(params[:product].permit(:title, :desc))
end
好的,我知道我的解释不够好。你真的需要阅读这个
答案 1 :(得分:0)
要编辑某些内容,首先需要拥有(或获取,创建或等等)。在 new 方法中,您只需创建 Product 的新实例,这不是必需的,但需要* form_for * helper,并且通常是很好的做法,因为它可以使用用于创建和编辑的相同表单。 Product.new 只是创建新产品并使用默认值初始化其字段。 Product.find 通过 id 搜索数据库中的产品(单个)并返回它。因此,对于编辑,您首先需要找到您的产品,然后它将用于填写编辑表单中的字段,而不是在 update 方法中您将更新它:
def update
target_product_required
@product.assign_attributes(product_params)
if @product.save
redirect_to @product
else
render :edit
end
end
def target_product_required
@product ||= Product.find(params[:id])
end
def product_params
params.require(:product).permit(:title, :description, :price, :available_quantity, :image, :remote_image_url)
end
这是常见模式:target_product_required返回/分配由params产品到实例变量的id,product_params返回产品指定的参数。有关此内容的更多信息,请参阅http://guides.rubyonrails.org/